76
76
77
77
SCRIPT_NAME = "slack"
78
78
SCRIPT_AUTHOR = "Trygve Aaberge <[email protected] >"
79
- SCRIPT_VERSION = "2.10.2 "
79
+ SCRIPT_VERSION = "2.11.0 "
80
80
SCRIPT_LICENSE = "MIT"
81
81
SCRIPT_DESC = "Extends WeeChat for typing notification/search/etc on slack.com"
82
82
REPO_URL = "https://github.com/wee-slack/wee-slack"
@@ -1691,6 +1691,7 @@ def create_buffer(self):
1691
1691
self .eventrouter .weechat_controller .register_buffer (
1692
1692
self .channel_buffer , self
1693
1693
)
1694
+ w .buffer_set (self .channel_buffer , "input_prompt" , self .nick )
1694
1695
w .buffer_set (self .channel_buffer , "input_multiline" , "1" )
1695
1696
w .buffer_set (self .channel_buffer , "localvar_set_type" , "server" )
1696
1697
w .buffer_set (self .channel_buffer , "localvar_set_slack_type" , self .type )
@@ -2421,6 +2422,7 @@ def create_buffer(self):
2421
2422
self .eventrouter .weechat_controller .register_buffer (
2422
2423
self .channel_buffer , self
2423
2424
)
2425
+ w .buffer_set (self .channel_buffer , "input_prompt" , self .team .nick )
2424
2426
w .buffer_set (self .channel_buffer , "input_multiline" , "1" )
2425
2427
w .buffer_set (
2426
2428
self .channel_buffer , "localvar_set_type" , get_localvar_type (self .type )
@@ -2887,12 +2889,12 @@ class SlackDMChannel(SlackChannel):
2887
2889
has some important differences.
2888
2890
"""
2889
2891
2890
- def __init__ (self , eventrouter , users , ** kwargs ):
2892
+ def __init__ (self , eventrouter , users , myidentifier , ** kwargs ):
2891
2893
dmuser = kwargs ["user" ]
2892
2894
kwargs ["name" ] = users [dmuser ].name if dmuser in users else dmuser
2893
2895
super (SlackDMChannel , self ).__init__ (eventrouter , "im" , ** kwargs )
2894
2896
self .update_color ()
2895
- self .members = {self .user }
2897
+ self .members = {myidentifier , self .user }
2896
2898
if dmuser in users :
2897
2899
self .set_topic (create_user_status_string (users [dmuser ].profile ))
2898
2900
@@ -3210,6 +3212,7 @@ def create_buffer(self):
3210
3212
self .eventrouter .weechat_controller .register_buffer (
3211
3213
self .channel_buffer , self
3212
3214
)
3215
+ w .buffer_set (self .channel_buffer , "input_prompt" , self .team .nick )
3213
3216
w .buffer_set (self .channel_buffer , "input_multiline" , "1" )
3214
3217
w .buffer_set (
3215
3218
self .channel_buffer ,
@@ -3729,7 +3732,9 @@ def handle_rtmstart(login_data, eventrouter, team, channel, metadata):
3729
3732
channels [item ["id" ]] = SlackChannel (eventrouter , ** item )
3730
3733
3731
3734
for item in login_data ["ims" ]:
3732
- channels [item ["id" ]] = SlackDMChannel (eventrouter , users , ** item )
3735
+ channels [item ["id" ]] = SlackDMChannel (
3736
+ eventrouter , users , login_data ["self" ]["id" ], ** item
3737
+ )
3733
3738
3734
3739
for item in login_data ["mpims" ]:
3735
3740
channels [item ["id" ]] = SlackMPDMChannel (
@@ -4111,6 +4116,16 @@ def process_pref_change(message_json, eventrouter, team, channel, metadata):
4111
4116
team .set_muted_channels (message_json ["value" ])
4112
4117
elif message_json ["name" ] == "highlight_words" :
4113
4118
team .set_highlight_words (message_json ["value" ])
4119
+ elif message_json ["name" ] == "all_notifications_prefs" :
4120
+ new_prefs = json .loads (message_json ["value" ])
4121
+ new_muted_channels = set (
4122
+ channel_id
4123
+ for channel_id , prefs in new_prefs ["channels" ].items ()
4124
+ if prefs ["muted" ]
4125
+ )
4126
+ team .set_muted_channels ("," .join (new_muted_channels ))
4127
+ global_keywords = new_prefs ["global" ]["global_keywords" ]
4128
+ team .set_highlight_words (global_keywords )
4114
4129
else :
4115
4130
dbg ("Preference change not implemented: {}\n " .format (message_json ["name" ]))
4116
4131
@@ -4123,7 +4138,9 @@ def process_user_change(message_json, eventrouter, team, channel, metadata):
4123
4138
profile = message_json ["user" ]["profile" ]
4124
4139
if user :
4125
4140
user .update_status (profile .get ("status_emoji" ), profile .get ("status_text" ))
4126
- dmchannel = team .find_channel_by_members ({user .identifier }, channel_type = "im" )
4141
+ dmchannel = team .find_channel_by_members (
4142
+ {team .myidentifier , user .identifier }, channel_type = "im"
4143
+ )
4127
4144
if dmchannel :
4128
4145
dmchannel .set_topic (create_user_status_string (profile ))
4129
4146
@@ -4373,7 +4390,8 @@ def process_channel_created(message_json, eventrouter, team, channel, metadata):
4373
4390
item ["is_member" ] = False
4374
4391
channel = SlackChannel (eventrouter , team = team , ** item )
4375
4392
team .channels [item ["id" ]] = channel
4376
- team .buffer_prnt ("Channel created: {}" .format (channel .name ))
4393
+ if config .log_channel_created :
4394
+ team .buffer_prnt ("Channel created: {}" .format (channel .name ))
4377
4395
4378
4396
4379
4397
def process_channel_rename (message_json , eventrouter , team , channel , metadata ):
@@ -4384,7 +4402,9 @@ def process_channel_rename(message_json, eventrouter, team, channel, metadata):
4384
4402
4385
4403
def process_im_created (message_json , eventrouter , team , channel , metadata ):
4386
4404
item = message_json ["channel" ]
4387
- channel = SlackDMChannel (eventrouter , team = team , users = team .users , ** item )
4405
+ channel = SlackDMChannel (
4406
+ eventrouter , team .users , team .myidentifier , team = team , ** item
4407
+ )
4388
4408
team .channels [item ["id" ]] = channel
4389
4409
team .buffer_prnt ("IM channel created: {}" .format (channel .name ))
4390
4410
@@ -5251,11 +5271,14 @@ def modify_buffer_line(buffer_pointer, ts, new_text):
5251
5271
5252
5272
5253
5273
def nick_from_profile (profile , username ):
5254
- full_name = profile .get ("real_name" ) or username
5255
- if config .use_full_names :
5256
- nick = full_name
5274
+ if config .use_usernames :
5275
+ nick = username
5257
5276
else :
5258
- nick = profile .get ("display_name" ) or full_name
5277
+ full_name = profile .get ("real_name" ) or username
5278
+ if config .use_full_names :
5279
+ nick = full_name
5280
+ else :
5281
+ nick = profile .get ("display_name" ) or full_name
5259
5282
return nick .replace (" " , "" )
5260
5283
5261
5284
@@ -5324,7 +5347,12 @@ def tag(
5324
5347
5325
5348
5326
5349
def set_own_presence_active (team ):
5327
- slackbot = team .get_channel_map ()["Slackbot" ]
5350
+ if config .use_usernames :
5351
+ nick_slackbot = "slackbot"
5352
+ else :
5353
+ nick_slackbot = "Slackbot"
5354
+
5355
+ slackbot = team .get_channel_map ()[nick_slackbot ]
5328
5356
channel = team .channels [slackbot ]
5329
5357
request = {"type" : "typing" , "channel" : channel .identifier }
5330
5358
channel .team .send_to_websocket (request , expect_reply = False )
@@ -5716,11 +5744,21 @@ def extra_info_function(channel):
5716
5744
@utf8_decode
5717
5745
def command_users (data , current_buffer , args ):
5718
5746
"""
5719
- /slack users
5747
+ /slack users [regex]
5720
5748
List the users in the current team.
5749
+ If regex is given show only users that match the case-insensitive regex.
5721
5750
"""
5722
5751
team = EVENTROUTER .weechat_controller .buffers [current_buffer ].team
5723
- return print_users_info (team , "Users" , team .users .values ())
5752
+
5753
+ if args :
5754
+ pat = re .compile (args , flags = re .IGNORECASE )
5755
+ users = [v for v in team .users .values () if pat .search (v .name )]
5756
+ header = 'Users that match "{}"' .format (args )
5757
+ else :
5758
+ users = team .users .values ()
5759
+ header = "Users"
5760
+
5761
+ return print_users_info (team , header , users )
5724
5762
5725
5763
5726
5764
@slack_buffer_required
@@ -6780,16 +6818,16 @@ class PluginConfig(object):
6780
6818
"colorize_private_chats" : Setting (
6781
6819
default = "false" , desc = "Whether to use nick-colors in DM windows."
6782
6820
),
6783
- "debug_mode" : Setting (
6784
- default = "false" ,
6785
- desc = "Open a dedicated buffer for debug messages and start logging"
6786
- " to it. How verbose the logging is depends on log_level." ,
6787
- ),
6788
6821
"debug_level" : Setting (
6789
6822
default = "3" ,
6790
6823
desc = "Show only this level of debug info (or higher) when"
6791
6824
" debug_mode is on. Lower levels -> more messages." ,
6792
6825
),
6826
+ "debug_mode" : Setting (
6827
+ default = "false" ,
6828
+ desc = "Open a dedicated buffer for debug messages and start logging"
6829
+ " to it. How verbose the logging is depends on log_level." ,
6830
+ ),
6793
6831
"distracting_channels" : Setting (default = "" , desc = "List of channels to hide." ),
6794
6832
"external_user_suffix" : Setting (
6795
6833
default = "*" , desc = "The suffix appended to nicks to indicate external users."
@@ -6812,6 +6850,10 @@ class PluginConfig(object):
6812
6850
"link_previews" : Setting (
6813
6851
default = "true" , desc = "Show previews of website content linked by teammates."
6814
6852
),
6853
+ "log_channel_created" : Setting (
6854
+ default = "true" ,
6855
+ desc = 'Log "Channel created" in the Server buffer.' ,
6856
+ ),
6815
6857
"map_underline_to" : Setting (
6816
6858
default = "_" ,
6817
6859
desc = "When sending underlined text to slack, use this formatting"
@@ -6827,6 +6869,10 @@ class PluginConfig(object):
6827
6869
" all highlights, but not other messages. all: Show all activity,"
6828
6870
" like other channels." ,
6829
6871
),
6872
+ "never_away" : Setting (
6873
+ default = "false" ,
6874
+ desc = 'Poke Slack every five minutes so that it never marks you "away".' ,
6875
+ ),
6830
6876
"notify_subscribed_threads" : Setting (
6831
6877
default = "auto" ,
6832
6878
desc = "Control if you want to see a notification in the team buffer when a"
@@ -6839,10 +6885,6 @@ class PluginConfig(object):
6839
6885
desc = "Control if you want to see a notification in the team buffer when a"
6840
6886
"usergroup's handle has changed, either true or false." ,
6841
6887
),
6842
- "never_away" : Setting (
6843
- default = "false" ,
6844
- desc = 'Poke Slack every five minutes so that it never marks you "away".' ,
6845
- ),
6846
6888
"record_events" : Setting (
6847
6889
default = "false" , desc = "Log all traffic from Slack to disk as JSON."
6848
6890
),
@@ -6915,12 +6957,6 @@ class PluginConfig(object):
6915
6957
default = "false" ,
6916
6958
desc = "When enabled shows thread messages in the parent channel." ,
6917
6959
),
6918
- "unfurl_ignore_alt_text" : Setting (
6919
- default = "false" ,
6920
- desc = 'When displaying ("unfurling") links to channels/users/etc,'
6921
- ' ignore the "alt text" present in the message and instead use the'
6922
- " canonical name of the thing being linked to." ,
6923
- ),
6924
6960
"unfurl_auto_link_display" : Setting (
6925
6961
default = "both" ,
6926
6962
desc = 'When displaying ("unfurling") links to channels/users/etc,'
@@ -6931,6 +6967,12 @@ class PluginConfig(object):
6931
6967
' the user, "url" to only display the url or "both" (the default)'
6932
6968
" to display both." ,
6933
6969
),
6970
+ "unfurl_ignore_alt_text" : Setting (
6971
+ default = "false" ,
6972
+ desc = 'When displaying ("unfurling") links to channels/users/etc,'
6973
+ ' ignore the "alt text" present in the message and instead use the'
6974
+ " canonical name of the thing being linked to." ,
6975
+ ),
6934
6976
"unhide_buffers_with_activity" : Setting (
6935
6977
default = "false" ,
6936
6978
desc = "When activity occurs on a buffer, unhide it even if it was"
@@ -6943,6 +6985,11 @@ class PluginConfig(object):
6943
6985
" false (the default), display names will be used if set, with a"
6944
6986
" fallback to the full name if display name is not set." ,
6945
6987
),
6988
+ "use_usernames" : Setting (
6989
+ default = "false" ,
6990
+ desc = "Use usernames as the nicks for all users. Takes priority"
6991
+ " over use_full_names. Default false." ,
6992
+ ),
6946
6993
}
6947
6994
6948
6995
# Set missing settings to their defaults. Load non-missing settings from
@@ -7259,7 +7306,9 @@ def handle_getPresence(response_json, eventrouter, team, channel, metadata):
7259
7306
7260
7307
def create_channel_from_info (eventrouter , channel_info , team , myidentifier , users ):
7261
7308
if channel_info .get ("is_im" ):
7262
- return SlackDMChannel (eventrouter , users , team = team , ** channel_info )
7309
+ return SlackDMChannel (
7310
+ eventrouter , users , myidentifier , team = team , ** channel_info
7311
+ )
7263
7312
elif channel_info .get ("is_mpim" ):
7264
7313
return SlackMPDMChannel (
7265
7314
eventrouter , users , myidentifier , team = team , ** channel_info
@@ -7327,6 +7376,28 @@ def handle_rtmconnect(response_json, eventrouter, team, channel, metadata):
7327
7376
"away" if initial_data ["presence" ]["manual_away" ] else "active"
7328
7377
)
7329
7378
7379
+ try :
7380
+ all_notifications_prefs = json .loads (
7381
+ initial_data ["prefs" ].get ("all_notifications_prefs" )
7382
+ )
7383
+ global_keywords = all_notifications_prefs .get ("global" , {}).get (
7384
+ "global_keywords"
7385
+ )
7386
+ except json .decoder .JSONDecodeError :
7387
+ global_keywords = None
7388
+
7389
+ if global_keywords is None :
7390
+ print_error (
7391
+ "global_keywords not found in users.prefs.get" , warning = True
7392
+ )
7393
+ dbg (
7394
+ "global_keywords not found in users.prefs.get. Response of users.prefs.get: {}" .format (
7395
+ json .dumps (initial_data ["prefs" ])
7396
+ ),
7397
+ level = 5 ,
7398
+ )
7399
+ global_keywords = ""
7400
+
7330
7401
team_info = {
7331
7402
"id" : team_id ,
7332
7403
"name" : response_json ["team" ]["id" ],
@@ -7351,7 +7422,7 @@ def handle_rtmconnect(response_json, eventrouter, team, channel, metadata):
7351
7422
bots ,
7352
7423
channels ,
7353
7424
muted_channels = initial_data ["prefs" ]["muted_channels" ],
7354
- highlight_words = initial_data [ "prefs" ][ "highlight_words" ] ,
7425
+ highlight_words = global_keywords ,
7355
7426
)
7356
7427
eventrouter .register_team (team )
7357
7428
team .connect ()
0 commit comments