From d6fb56faf85dd1abbb8789295c290c162a02067f Mon Sep 17 00:00:00 2001 From: Trygve Aaberge Date: Mon, 25 Sep 2017 23:32:10 +0200 Subject: fix: Make /topic behave the same way as on IRC This refactors the topic command, and makes it behave the same way as it does on IRC. The fixes include: - `/topic` prints the topic instead of clearing it - `/topic #channel` prints the topic for that channel in that channels buffer instead of setting the topic to #channel - `/topic #channel [...]` for a channel that doesn't exist gives a proper error message The patch also removes some unused code, refactors the logic and removes the `/slack topic` command, since using `/topic` should suffice. The reason it returs WEECHAT_RC_OK_EAT when the channel isn't found, is so weechat doesn't print an error message such as: irc: command "topic" must be executed on irc buffer (server or channel) Fixes #405 --- wee_slack.py | 67 +++++++++++++++++++++++++++++------------------------------- 1 file changed, 32 insertions(+), 35 deletions(-) (limited to 'wee_slack.py') diff --git a/wee_slack.py b/wee_slack.py index 90b56ac..37db0ec 100644 --- a/wee_slack.py +++ b/wee_slack.py @@ -2826,48 +2826,45 @@ def part_command_cb(data, current_buffer, args): @slack_buffer_or_ignore -def topic_command_cb(data, current_buffer, args): - n = len(args.split()) - if n < 2: - channel = channels.find(current_buffer) - if channel: - w.prnt(current_buffer, 'Topic for {} is "{}"'.format(channel.name, channel.topic)) - return w.WEECHAT_RC_OK_EAT - elif command_topic(data, current_buffer, args.split(None, 1)[1]): - return w.WEECHAT_RC_OK_EAT - else: - return w.WEECHAT_RC_ERROR - - -@slack_buffer_required -def command_topic(data, current_buffer, args): +def topic_command_cb(data, current_buffer, command): """ Change the topic of a channel - /slack topic [] [|-delete] + /topic [] [|-delete] """ data = decode_from_utf8(data) - args = decode_from_utf8(args) - e = EVENTROUTER - team = e.weechat_controller.buffers[current_buffer].team - # server = servers.find(current_domain_name()) - args = args.split(' ') - if len(args) > 2 and args[1].startswith('#'): - cmap = team.get_channel_map() - channel_name = args[1][1:] - channel = team.channels[cmap[channel_name]] - topic = " ".join(args[2:]) + command = decode_from_utf8(command) + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + + args = command.split()[1:] + channel_name = None + topic = [] + if args: + if args[0].startswith('#'): + channel_name = args[0][1:] + topic = args[1:] + else: + topic = args + + if channel_name: + channel = team.channels.get(team.get_channel_map().get(channel_name)) else: - channel = e.weechat_controller.buffers[current_buffer] - topic = " ".join(args[1:]) + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] - if channel: - if topic == "-delete": - topic = '' - s = SlackRequest(team.token, "channels.setTopic", {"channel": channel.identifier, "topic": topic}, team_hash=team.team_hash) - EVENTROUTER.receive(s) + if not channel: + w.prnt(team.channel_buffer, "#{}: No such channel".format(channel_name)) return w.WEECHAT_RC_OK_EAT + + if topic: + topic = ' '.join(topic) + if topic == '-delete': + topic = '' + + if topic == []: + w.prnt(channel.channel_buffer, 'Topic for {} is "{}"'.format(channel.name, channel.slack_topic['value'])) else: - return w.WEECHAT_RC_ERROR_EAT + s = SlackRequest(team.token, "channels.setTopic", {"channel": channel.identifier, "topic": topic}, team_hash=team.team_hash) + EVENTROUTER.receive(s) + return w.WEECHAT_RC_OK_EAT @slack_buffer_or_ignore @@ -3267,7 +3264,7 @@ def setup_hooks(): w.hook_command_run('/join', 'command_talk', '') w.hook_command_run('/part', 'part_command_cb', '') w.hook_command_run('/leave', 'part_command_cb', '') - w.hook_command_run('/topic', 'command_topic', '') + w.hook_command_run('/topic', 'topic_command_cb', '') w.hook_command_run('/thread', 'thread_command_callback', '') w.hook_command_run('/reply', 'thread_command_callback', '') w.hook_command_run('/rehistory', 'rehistory_command_callback', '') -- cgit