aboutsummaryrefslogtreecommitdiffstats
path: root/wee_slack.py
diff options
context:
space:
mode:
authorTrygve Aaberge <trygveaa@gmail.com>2019-06-12 00:54:06 +0200
committerTrygve Aaberge <trygveaa@gmail.com>2019-08-25 19:45:18 +0200
commit60d422aec30aea8e5fcd982aa6c934890a6ef252 (patch)
treefebad7348551a854c93335639713e6dd8f5a504a /wee_slack.py
parenta2b4d08ba6b9cbe190ff6b46db4cf429e83e8f80 (diff)
downloadwee-slack-60d422aec30aea8e5fcd982aa6c934890a6ef252.tar.gz
Add support for the /invite command
Fixes #698
Diffstat (limited to 'wee_slack.py')
-rw-r--r--wee_slack.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/wee_slack.py b/wee_slack.py
index 032965e..129e4a7 100644
--- a/wee_slack.py
+++ b/wee_slack.py
@@ -2781,6 +2781,18 @@ def handle_usersprofileset(json, eventrouter, **kwargs):
w.prnt('', 'ERROR: Failed to set profile: {}'.format(json['error']))
+def handle_conversationsinvite(json, eventrouter, **kwargs):
+ request_metadata = json['wee_slack_request_metadata']
+ team = eventrouter.teams[request_metadata.team_hash]
+ nicks = ', '.join(request_metadata.nicks)
+ if json['ok']:
+ channel = team.channels.get(json['channel']['id'], request_metadata.channel)
+ w.prnt(team.channel_buffer, 'Invited {} to {}'.format(nicks, channel.name))
+ else:
+ w.prnt(team.channel_buffer, 'ERROR: Couldn\'t invite {} to {}. Error: {}'
+ .format(nicks, request_metadata.channel.name, json['error']))
+
+
def handle_chatcommand(json, eventrouter, **kwargs):
request_metadata = json['wee_slack_request_metadata']
team = eventrouter.teams[request_metadata.team_hash]
@@ -3532,6 +3544,41 @@ def tag(tagset=None, user=None, self_msg=False, backlog=False, no_log=False, ext
@slack_buffer_or_ignore
@utf8_decode
+def invite_command_cb(data, current_buffer, args):
+ team = EVENTROUTER.weechat_controller.buffers[current_buffer].team
+ split_args = args.split()[1:]
+ if not split_args:
+ w.prnt('', 'Too few arguments for command "/invite" (help on command: /help invite)')
+ return w.WEECHAT_RC_OK_EAT
+
+ if split_args[-1].startswith("#") or split_args[-1].startswith(config.group_name_prefix):
+ nicks = split_args[:-1]
+ channel = team.channels.get(team.get_channel_map().get(split_args[-1]))
+ if not nicks or not channel:
+ w.prnt('', '{}: No such nick/channel'.format(split_args[-1]))
+ return w.WEECHAT_RC_OK_EAT
+ else:
+ nicks = split_args
+ channel = EVENTROUTER.weechat_controller.buffers[current_buffer]
+
+ all_users = team.get_username_map()
+ users = set()
+ for nick in nicks:
+ user = all_users.get(nick.lstrip('@'))
+ if not user:
+ w.prnt('', 'ERROR: Unknown user: {}'.format(nick))
+ return w.WEECHAT_RC_OK_EAT
+ users.add(user)
+
+ s = SlackRequest(team.token, "conversations.invite",
+ {"channel": channel.identifier, "users": ",".join(users)}, team_hash=team.team_hash,
+ channel=channel, nicks=nicks)
+ EVENTROUTER.receive(s)
+ return w.WEECHAT_RC_OK_EAT
+
+
+@slack_buffer_or_ignore
+@utf8_decode
def part_command_cb(data, current_buffer, args):
e = EVENTROUTER
args = args.split()
@@ -4396,6 +4443,7 @@ def setup_hooks():
w.hook_command_run('/part', 'part_command_cb', '')
w.hook_command_run('/topic', 'topic_command_cb', '')
w.hook_command_run('/msg', 'msg_command_cb', '')
+ w.hook_command_run('/invite', 'invite_command_cb', '')
w.hook_command_run("/input complete_next", "complete_next_cb", "")
w.hook_command_run("/input set_unread", "set_unread_cb", "")
w.hook_command_run("/input set_unread_current_buffer", "set_unread_current_buffer_cb", "")