switch to autojoinem.py

master
Ben Harris 2021-01-15 14:15:52 -05:00
parent 67829c71a4
commit 9cd6bc92ba
7 changed files with 114 additions and 105 deletions

View File

@ -189,7 +189,7 @@ tilde.local_hostname
tilde.usermode tilde.usermode
tilde.command = "/msg operserv login ${sec.data.pass}" tilde.command = "/msg operserv login ${sec.data.pass}"
tilde.command_delay tilde.command_delay
tilde.autojoin = "#meta,#admin,#opers,#music,#politics,#gopher,#tildeverse,#idlerpg,#tilderadio,#minecraft,#cosmic,#institute,#.tilde,#tildetel,#thunix,#theasylum,#aussie,#projects,#hamradio,#vim,#pink,#bots,#ctrl-c,#radiofreqs,#envs,#gemini,#club,#zine,#team,#geocities,#helpdesk,#counting,#covid19,#rw.rs,#counting-meta,#irctokens,#linux,#fr,#factorio,#nsfw,#crawl,#mumble,#tilderadio-djs,#tilde.zone-admin,#tildebot,#submeta,#coffee,#envs_german,#wtf,#beer,#espanol,#meta_german,#tildelinux,#sus,#anelki,#bread,#secret-sudoers,#UT99,#prepping,##ekbots,#bungame,#texto-plano,#netnews,#red :10:20,adminsonly" tilde.autojoin = "#admin,#opers,#music,#tildeverse,#cosmic,#.tilde,#tildetel,#thunix,#theasylum,#aussie,#projects,#vim,#pink,#club,#zine,#geocities,#counting,#rw.rs,#counting-meta,#irctokens,#linux,#fr,#factorio,#tilde.zone-admin,#tildebot,#envs_german,#meta_german,#sus,#secret-sudoers,#prepping,##ekbots,#texto-plano,#netnews,#red,#covid19,#coffee,#minecraft,#espanol,#politics,#gopher,#UT99,#tilderadio-djs,#tilderadio,#ctrl-c,#anelki,#institute,#bread,#nsfw,#envs,#bots,#gemini,#team,#meta adminsonly"
tilde.autorejoin tilde.autorejoin
tilde.autorejoin_delay tilde.autorejoin_delay
tilde.connection_timeout tilde.connection_timeout
@ -232,7 +232,7 @@ hashbang.local_hostname
hashbang.usermode hashbang.usermode
hashbang.command hashbang.command
hashbang.command_delay hashbang.command_delay
hashbang.autojoin = "#!opers,#!os,#!social,#!,#!cast" hashbang.autojoin = "#!opers,#!os,#!social,#!cast,#!"
hashbang.autorejoin hashbang.autorejoin
hashbang.autorejoin_delay hashbang.autorejoin_delay
hashbang.connection_timeout hashbang.connection_timeout
@ -275,7 +275,7 @@ town.local_hostname
town.usermode town.usermode
town.command town.command
town.command_delay town.command_delay
town.autojoin = "#tildetown,#bots,#counting,#counting-meta,#admins,#announcements,#politics" town.autojoin = "#bots,#admins,#announcements,#politics,#tildetown,#counting,#counting-meta"
town.autorejoin town.autorejoin
town.autorejoin_delay town.autorejoin_delay
town.connection_timeout town.connection_timeout
@ -318,7 +318,7 @@ esper.local_hostname
esper.usermode esper.usermode
esper.command esper.command
esper.command_delay esper.command_delay
esper.autojoin = "#lobby,#coders,#factorio 10:30" esper.autojoin = "#coders,#factorio,#lobby"
esper.autorejoin esper.autorejoin
esper.autorejoin_delay esper.autorejoin_delay
esper.connection_timeout esper.connection_timeout
@ -361,7 +361,7 @@ sdf.local_hostname
sdf.usermode sdf.usermode
sdf.command sdf.command
sdf.command_delay sdf.command_delay
sdf.autojoin = "#sdf,#gopher,#spanish :kick:20:75" sdf.autojoin = "#gopher,#spanish,#sdf"
sdf.autorejoin sdf.autorejoin
sdf.autorejoin_delay sdf.autorejoin_delay
sdf.connection_timeout sdf.connection_timeout
@ -447,7 +447,7 @@ oftc.local_hostname
oftc.usermode oftc.usermode
oftc.command oftc.command
oftc.command_delay oftc.command_delay
oftc.autojoin = "#debian-devel,#fish" oftc.autojoin = "#fish,#debian-devel"
oftc.autorejoin oftc.autorejoin
oftc.autorejoin_delay oftc.autorejoin_delay
oftc.connection_timeout oftc.connection_timeout
@ -490,7 +490,7 @@ freenode.local_hostname
freenode.usermode freenode.usermode
freenode.command freenode.command
freenode.command_delay freenode.command_delay
freenode.autojoin = "#weechat,##oodnet,#lobsters,#gitea,#mastodon,#pleroma,#oragono,#sr.ht,#cmpwn,#bitbot,#gophernicus,##jan6,#ascii.town,##ircv3-chat,#futel,#trashtown,#weechat-android,#ovh,#tilde.team,#fosshost,#fosshost-meet,#fosshost-dev,##crustaceans,##irctokens,#borgmatic,#fosshost-volunteers,#fosshost-social,#mailman,#ubuntu-packaging,#among-sus,#borgbackup 6:10" freenode.autojoin = "##oodnet,#gophernicus,##jan6,##ircv3-chat,#trashtown,#tilde.team,#fosshost-dev,##irctokens,#fosshost-volunteers,#among-sus,#mailman,#ascii.town,#mastodon,#cmpwn,#lobsters,#oragono,##crustaceans,#bitbot,#ovh,#borgmatic,#weechat-android,#gitea,#fosshost,#pleroma,#sr.ht,#weechat"
freenode.autorejoin freenode.autorejoin
freenode.autorejoin_delay freenode.autorejoin_delay
freenode.connection_timeout freenode.connection_timeout
@ -576,7 +576,7 @@ inspircd.local_hostname
inspircd.usermode inspircd.usermode
inspircd.command inspircd.command
inspircd.command_delay inspircd.command_delay
inspircd.autojoin = "#inspircd 10" inspircd.autojoin = "#inspircd"
inspircd.autorejoin inspircd.autorejoin
inspircd.autorejoin_delay inspircd.autorejoin_delay
inspircd.connection_timeout inspircd.connection_timeout
@ -633,10 +633,10 @@ slashnet.msg_quit
slashnet.notify slashnet.notify
slashnet.split_msg_max_length slashnet.split_msg_max_length
slashnet.charset_message slashnet.charset_message
bitlbee.addresses = "irc.net/6697" bitlbee.addresses = "localhost"
bitlbee.proxy bitlbee.proxy
bitlbee.ipv6 bitlbee.ipv6
bitlbee.ssl = on bitlbee.ssl
bitlbee.ssl_cert bitlbee.ssl_cert
bitlbee.ssl_password bitlbee.ssl_password
bitlbee.ssl_priorities bitlbee.ssl_priorities
@ -646,7 +646,7 @@ bitlbee.ssl_verify
bitlbee.password bitlbee.password
bitlbee.capabilities bitlbee.capabilities
bitlbee.sasl_mechanism bitlbee.sasl_mechanism
bitlbee.sasl_username = "benharri" bitlbee.sasl_username = "ben"
bitlbee.sasl_password = "${sec.data.pass}" bitlbee.sasl_password = "${sec.data.pass}"
bitlbee.sasl_key bitlbee.sasl_key
bitlbee.sasl_timeout bitlbee.sasl_timeout
@ -654,7 +654,7 @@ bitlbee.sasl_fail
bitlbee.autoconnect bitlbee.autoconnect
bitlbee.autoreconnect bitlbee.autoreconnect
bitlbee.autoreconnect_delay bitlbee.autoreconnect_delay
bitlbee.nicks = "benharri" bitlbee.nicks
bitlbee.nicks_alternate bitlbee.nicks_alternate
bitlbee.username bitlbee.username
bitlbee.realname bitlbee.realname
@ -662,7 +662,7 @@ bitlbee.local_hostname
bitlbee.usermode bitlbee.usermode
bitlbee.command bitlbee.command
bitlbee.command_delay bitlbee.command_delay
bitlbee.autojoin = "&bitlbee,#cifuzofu,#harris,#team,#conversations,#dino,#ejabberd,#biboumi,#soprani.ca,#operators,#xsf,#gajim,#hmm,#lobby,#conversations-offtopic,&jabber,&jabber2,#jabberzac,#mx-frendos" bitlbee.autojoin = "&bitlbee,&hmm,&tilde,#brendo,#harris,&SMS,#gritty,#cifuzofu,#jabberzac,#tilde.team,#biboumi,#dino,#movim,#ejabberd,#gajim,#openhardware,#conversations"
bitlbee.autorejoin bitlbee.autorejoin
bitlbee.autorejoin_delay bitlbee.autorejoin_delay
bitlbee.connection_timeout bitlbee.connection_timeout
@ -705,7 +705,7 @@ technet.local_hostname
technet.usermode technet.usermode
technet.command technet.command
technet.command_delay technet.command_delay
technet.autojoin = "#tilde,#technet,#computertech" technet.autojoin = "#computertech,#technet"
technet.autorejoin technet.autorejoin
technet.autorejoin_delay technet.autorejoin_delay
technet.connection_timeout technet.connection_timeout
@ -748,7 +748,7 @@ pine.local_hostname
pine.usermode pine.usermode
pine.command pine.command
pine.command_delay pine.command_delay
pine.autojoin = "#pine-community,#pinephone" pine.autojoin = "#pinephone,#pine-community"
pine.autorejoin pine.autorejoin
pine.autorejoin_delay pine.autorejoin_delay
pine.connection_timeout pine.connection_timeout

View File

@ -33,6 +33,5 @@ time_format = "%Y-%m-%d %H:%M:%S"
[level] [level]
irc = 3 irc = 3
irc.bitlbee.#tilde.zone_@ben = 0
[mask] [mask]

View File

@ -13,7 +13,6 @@
fifo.fifo = "on" fifo.fifo = "on"
guile.check_license = "off" guile.check_license = "off"
lua.check_license = "off" lua.check_license = "off"
lua.matrix.autojoin_on_invite = "on"
lua.matrix.backlog_lines = "120" lua.matrix.backlog_lines = "120"
lua.matrix.debug = "off" lua.matrix.debug = "off"
lua.matrix.encrypted_message_color = "lightgreen" lua.matrix.encrypted_message_color = "lightgreen"
@ -57,19 +56,10 @@ python.apply_corrections.data_timeout = "60"
python.apply_corrections.message_limit = "2" python.apply_corrections.message_limit = "2"
python.apply_corrections.print_format = "[nick]: [corrected]" python.apply_corrections.print_format = "[nick]: [corrected]"
python.apply_corrections.print_limit = "1" python.apply_corrections.print_limit = "1"
python.autojoin.autosave = "on"
python.autojoin_on_invite.autojoin_key = "on"
python.autojoin_on_invite.ignore_channels = ""
python.autojoin_on_invite.ignore_nicks = ""
python.autojoin_on_invite.whitelist_channels = ""
python.autojoin_on_invite.whitelist_nicks = ""
python.autojoinem.sorted = "off" python.autojoinem.sorted = "off"
python.autosavekey.add = "on" python.autosavekey.add = "on"
python.autosavekey.mute = "off" python.autosavekey.mute = "off"
python.autosavekey.secure = "on" python.autosavekey.secure = "on"
python.bitlbee_typing_notice.channel = "&bitlbee"
python.bitlbee_typing_notice.server = "bitlbee"
python.bitlbee_typing_notice.timeout = "4"
python.buffer_autoclose.age_limit = "30" python.buffer_autoclose.age_limit = "30"
python.buffer_autoclose.ignore = "bitlbee.maddie" python.buffer_autoclose.ignore = "bitlbee.maddie"
python.buffer_autoclose.interval = "1" python.buffer_autoclose.interval = "1"

View File

@ -348,8 +348,15 @@ def format_exc_only():
return ''.join(decode_from_utf8(traceback.format_exception_only(etype, value))) return ''.join(decode_from_utf8(traceback.format_exception_only(etype, value)))
def get_localvar_type(slack_type):
if slack_type in ("im", "mpim"):
return "private"
else:
return "channel"
def get_nick_color(nick): def get_nick_color(nick):
info_name_prefix = "irc_" if int(weechat_version) < 0x1050000 else "" info_name_prefix = "irc_" if weechat_version < 0x1050000 else ""
return w.info_get(info_name_prefix + "nick_color_name", nick) return w.info_get(info_name_prefix + "nick_color_name", nick)
@ -361,7 +368,7 @@ def get_thread_color(thread_id):
def sha1_hex(s): def sha1_hex(s):
return hashlib.sha1(s.encode('utf-8')).hexdigest() return str(hashlib.sha1(s.encode('utf-8')).hexdigest())
def get_functions_with_prefix(prefix): def get_functions_with_prefix(prefix):
@ -863,7 +870,8 @@ def buffer_input_callback(signal, buffer_ptr, data):
this includes add/remove reactions, modifying messages, and this includes add/remove reactions, modifying messages, and
sending messages. sending messages.
""" """
data = data.replace('\r', '\n') if weechat_version < 0x2090000:
data = data.replace('\r', '\n')
eventrouter = eval(signal) eventrouter = eval(signal)
channel = eventrouter.weechat_controller.get_channel_from_buffer_ptr(buffer_ptr) channel = eventrouter.weechat_controller.get_channel_from_buffer_ptr(buffer_ptr)
if not channel: if not channel:
@ -1377,6 +1385,7 @@ class SlackTeam(object):
if not self.channel_buffer: if not self.channel_buffer:
self.channel_buffer = w.buffer_new(self.name, "buffer_input_callback", "EVENTROUTER", "", "") self.channel_buffer = w.buffer_new(self.name, "buffer_input_callback", "EVENTROUTER", "", "")
self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self) self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self)
w.buffer_set(self.channel_buffer, "input_multiline", "1")
w.buffer_set(self.channel_buffer, "localvar_set_type", 'server') w.buffer_set(self.channel_buffer, "localvar_set_type", 'server')
w.buffer_set(self.channel_buffer, "localvar_set_slack_type", self.type) w.buffer_set(self.channel_buffer, "localvar_set_slack_type", self.type)
w.buffer_set(self.channel_buffer, "localvar_set_nick", self.nick) w.buffer_set(self.channel_buffer, "localvar_set_nick", self.nick)
@ -1455,10 +1464,11 @@ class SlackTeam(object):
try: try:
# only http proxy is currently supported # only http proxy is currently supported
proxy = ProxyWrapper() proxy = ProxyWrapper()
timeout = config.slack_timeout / 1000
if proxy.has_proxy == True: if proxy.has_proxy == True:
ws = create_connection(self.ws_url, sslopt=sslopt_ca_certs, http_proxy_host=proxy.proxy_address, http_proxy_port=proxy.proxy_port, http_proxy_auth=(proxy.proxy_user, proxy.proxy_password)) ws = create_connection(self.ws_url, timeout=timeout, sslopt=sslopt_ca_certs, http_proxy_host=proxy.proxy_address, http_proxy_port=proxy.proxy_port, http_proxy_auth=(proxy.proxy_user, proxy.proxy_password))
else: else:
ws = create_connection(self.ws_url, sslopt=sslopt_ca_certs) ws = create_connection(self.ws_url, timeout=timeout, sslopt=sslopt_ca_certs)
self.hook = w.hook_fd(ws.sock.fileno(), 1, 0, 0, "receive_ws_callback", self.get_team_hash()) self.hook = w.hook_fd(ws.sock.fileno(), 1, 0, 0, "receive_ws_callback", self.get_team_hash())
ws.sock.setblocking(0) ws.sock.setblocking(0)
@ -1575,7 +1585,9 @@ class SlackChannelCommon(object):
prefix = message.sender prefix = message.sender
extra_tags = None extra_tags = None
if message.subtype == "thread_message" and not thread_channel: if message.subtype == "thread_broadcast":
extra_tags = [message.subtype]
elif type(message) == SlackThreadMessage and not thread_channel:
if config.thread_messages_in_channel: if config.thread_messages_in_channel:
extra_tags = [message.subtype] extra_tags = [message.subtype]
else: else:
@ -1602,6 +1614,17 @@ class SlackChannelCommon(object):
config.thread_messages_in_channel and self.pending_history_requests): config.thread_messages_in_channel and self.pending_history_requests):
self.print_getting_history() self.print_getting_history()
def send_message(self, message, subtype=None, request_dict_ext={}):
message = linkify_text(message, self.team)
if subtype == 'me_message':
s = SlackRequest(self.team, "chat.meMessage", {"channel": self.identifier, "text": message}, channel=self)
self.eventrouter.receive(s)
else:
request = {"type": "message", "channel": self.identifier,
"text": message, "user": self.team.myidentifier}
request.update(request_dict_ext)
self.team.send_to_websocket(request)
def send_add_reaction(self, msg_id, reaction): def send_add_reaction(self, msg_id, reaction):
self.send_change_reaction("reactions.add", msg_id, reaction) self.send_change_reaction("reactions.add", msg_id, reaction)
@ -1822,7 +1845,7 @@ class SlackChannel(SlackChannelCommon):
w.buffer_set(self.channel_buffer, "hotlist", "1") w.buffer_set(self.channel_buffer, "hotlist", "1")
def formatted_name(self, style="default", typing=False, present=None): def formatted_name(self, style="default", typing=False, present=None):
show_typing = typing and config.channel_name_typing_indicator show_typing = typing and not self.muted and config.channel_name_typing_indicator
if style == "sidebar" and show_typing: if style == "sidebar" and show_typing:
prepend = ">" prepend = ">"
elif self.type == "group" or self.type == "private": elif self.type == "group" or self.type == "private":
@ -1960,10 +1983,8 @@ class SlackChannel(SlackChannelCommon):
self.active = True self.active = True
self.channel_buffer = w.buffer_new(self.formatted_name(style="long_default"), "buffer_input_callback", "EVENTROUTER", "", "") self.channel_buffer = w.buffer_new(self.formatted_name(style="long_default"), "buffer_input_callback", "EVENTROUTER", "", "")
self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self) self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self)
if self.type in ("im", "mpim"): w.buffer_set(self.channel_buffer, "input_multiline", "1")
w.buffer_set(self.channel_buffer, "localvar_set_type", 'private') w.buffer_set(self.channel_buffer, "localvar_set_type", get_localvar_type(self.type))
else:
w.buffer_set(self.channel_buffer, "localvar_set_type", 'channel')
w.buffer_set(self.channel_buffer, "localvar_set_slack_type", self.type) w.buffer_set(self.channel_buffer, "localvar_set_slack_type", self.type)
w.buffer_set(self.channel_buffer, "localvar_set_channel", self.formatted_name()) w.buffer_set(self.channel_buffer, "localvar_set_channel", self.formatted_name())
w.buffer_set(self.channel_buffer, "localvar_set_nick", self.team.nick) w.buffer_set(self.channel_buffer, "localvar_set_nick", self.team.nick)
@ -2024,18 +2045,6 @@ class SlackChannel(SlackChannelCommon):
if backlog or self_msg: if backlog or self_msg:
self.mark_read(ts, update_remote=False, force=True) self.mark_read(ts, update_remote=False, force=True)
def send_message(self, message, subtype=None, request_dict_ext={}):
message = linkify_text(message, self.team)
dbg(message)
if subtype == 'me_message':
s = SlackRequest(self.team, "chat.meMessage", {"channel": self.identifier, "text": message}, channel=self)
self.eventrouter.receive(s)
else:
request = {"type": "message", "channel": self.identifier,
"text": message, "user": self.team.myidentifier}
request.update(request_dict_ext)
self.team.send_to_websocket(request)
def store_message(self, message_to_store): def store_message(self, message_to_store):
if not self.active: if not self.active:
return return
@ -2243,7 +2252,7 @@ class SlackChannelVisibleMessages(MappingReversible):
return False return False
message = self.get(ts) message = self.get(ts)
if (message and message.subtype == "thread_message" and if (type(message) == SlackThreadMessage and message.subtype != "thread_broadcast" and
not config.thread_messages_in_channel): not config.thread_messages_in_channel):
return False return False
@ -2492,8 +2501,9 @@ class SlackThreadChannel(SlackChannelCommon):
return name return name
else: else:
indent_expr = w.config_string(w.config_get("buflist.format.indent")) indent_expr = w.config_string(w.config_get("buflist.format.indent"))
indent = w.string_eval_expression(indent_expr, {}, {"slack_thread": "1"}, {}) # Only indent with space if slack_type isn't mentioned in the indent option
return "{}{}${}".format(indent, w.color("default"), name) indent = "" if "slack_type" in indent_expr else " "
return "{}${}".format(indent, name)
elif style == "long_default": elif style == "long_default":
if self.label_full_drop_prefix: if self.label_full_drop_prefix:
return name return name
@ -2552,14 +2562,10 @@ class SlackThreadChannel(SlackChannelCommon):
if subtype == 'me_message': if subtype == 'me_message':
w.prnt("", "ERROR: /me is not supported in threads") w.prnt("", "ERROR: /me is not supported in threads")
return w.WEECHAT_RC_ERROR return w.WEECHAT_RC_ERROR
message = linkify_text(message, self.team)
dbg(message) request = {"thread_ts": str(self.thread_ts)}
request = {"type": "message", "text": message,
"channel": self.parent_channel.identifier,
"thread_ts": str(self.thread_ts),
"user": self.team.myidentifier}
request.update(request_dict_ext) request.update(request_dict_ext)
self.team.send_to_websocket(request) super(SlackThreadChannel, self).send_message(message, subtype, request)
def open(self, update_remote=True): def open(self, update_remote=True):
self.create_buffer() self.create_buffer()
@ -2591,7 +2597,8 @@ class SlackThreadChannel(SlackChannelCommon):
if not self.channel_buffer: if not self.channel_buffer:
self.channel_buffer = w.buffer_new(self.formatted_name(style="long_default"), "buffer_input_callback", "EVENTROUTER", "", "") self.channel_buffer = w.buffer_new(self.formatted_name(style="long_default"), "buffer_input_callback", "EVENTROUTER", "", "")
self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self) self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self)
w.buffer_set(self.channel_buffer, "localvar_set_type", 'channel') w.buffer_set(self.channel_buffer, "input_multiline", "1")
w.buffer_set(self.channel_buffer, "localvar_set_type", get_localvar_type(self.parent_channel.type))
w.buffer_set(self.channel_buffer, "localvar_set_slack_type", self.type) w.buffer_set(self.channel_buffer, "localvar_set_slack_type", self.type)
w.buffer_set(self.channel_buffer, "localvar_set_nick", self.team.nick) w.buffer_set(self.channel_buffer, "localvar_set_nick", self.team.nick)
w.buffer_set(self.channel_buffer, "localvar_set_channel", self.formatted_name()) w.buffer_set(self.channel_buffer, "localvar_set_channel", self.formatted_name())
@ -2708,8 +2715,8 @@ class SlackMessage(object):
Note: these can't be tied to a SlackUser object because users Note: these can't be tied to a SlackUser object because users
can be deleted, so we have to store sender in each one. can be deleted, so we have to store sender in each one.
""" """
def __init__(self, subtype, message_json, team, channel): def __init__(self, subtype, message_json, channel):
self.team = team self.team = channel.team
self.channel = channel self.channel = channel
self.subtype = subtype self.subtype = subtype
self.user_identifier = message_json.get('user') self.user_identifier = message_json.get('user')
@ -2891,7 +2898,9 @@ class SlackMessage(object):
class SlackThreadMessage(SlackMessage): class SlackThreadMessage(SlackMessage):
def __init__(self, parent_channel, thread_ts, message_json, *args): def __init__(self, parent_channel, thread_ts, message_json, *args):
super(SlackThreadMessage, self).__init__(message_json['subtype'], message_json, *args) subtype = message_json.get('subtype',
'thread_broadcast' if message_json.get("reply_broadcast") else 'thread_message')
super(SlackThreadMessage, self).__init__(subtype, message_json, *args)
self.parent_channel = parent_channel self.parent_channel = parent_channel
self.thread_ts = thread_ts self.thread_ts = thread_ts
@ -3312,7 +3321,7 @@ def process_user_change(message_json, eventrouter, team, channel, metadata):
def process_user_typing(message_json, eventrouter, team, channel, metadata): def process_user_typing(message_json, eventrouter, team, channel, metadata):
if channel: if channel and metadata["user"]:
channel.set_typing(metadata["user"]) channel.set_typing(metadata["user"])
w.bar_item_update("slack_typing_notice") w.bar_item_update("slack_typing_notice")
@ -3330,19 +3339,15 @@ def process_message(message_json, eventrouter, team, channel, metadata, history_
if not history_message and "ts" in message_json and SlackTS(message_json["ts"]) in channel.messages: if not history_message and "ts" in message_json and SlackTS(message_json["ts"]) in channel.messages:
return return
if "thread_ts" in message_json and "reply_count" not in message_json and "subtype" not in message_json:
if message_json.get("reply_broadcast"):
message_json["subtype"] = "thread_broadcast"
else:
message_json["subtype"] = "thread_message"
subtype = message_json.get("subtype") subtype = message_json.get("subtype")
subtype_functions = get_functions_with_prefix("subprocess_") subtype_functions = get_functions_with_prefix("subprocess_")
if subtype in subtype_functions: if "thread_ts" in message_json and "reply_count" not in message_json:
message = subprocess_thread_message(message_json, eventrouter, team, channel, history_message)
elif subtype in subtype_functions:
message = subtype_functions[subtype](message_json, eventrouter, team, channel, history_message) message = subtype_functions[subtype](message_json, eventrouter, team, channel, history_message)
else: else:
message = SlackMessage(subtype or "normal", message_json, team, channel) message = SlackMessage(subtype or "normal", message_json, channel)
channel.store_message(message) channel.store_message(message)
channel.unread_count_display += 1 channel.unread_count_display += 1
@ -3395,7 +3400,7 @@ def download_files(message_json, team):
def subprocess_thread_message(message_json, eventrouter, team, channel, history_message): def subprocess_thread_message(message_json, eventrouter, team, channel, history_message):
parent_ts = SlackTS(message_json['thread_ts']) parent_ts = SlackTS(message_json['thread_ts'])
message = SlackThreadMessage(channel, parent_ts, message_json, team, channel) message = SlackThreadMessage(channel, parent_ts, message_json, channel)
parent_message = message.parent_message parent_message = message.parent_message
if parent_message and message.ts not in parent_message.submessages: if parent_message and message.ts not in parent_message.submessages:
@ -3421,21 +3426,21 @@ subprocess_thread_broadcast = subprocess_thread_message
def subprocess_channel_join(message_json, eventrouter, team, channel, history_message): def subprocess_channel_join(message_json, eventrouter, team, channel, history_message):
message = SlackMessage("join", message_json, team, channel) message = SlackMessage("join", message_json, channel)
channel.store_message(message) channel.store_message(message)
channel.user_joined(message_json["user"]) channel.user_joined(message_json["user"])
return message return message
def subprocess_channel_leave(message_json, eventrouter, team, channel, history_message): def subprocess_channel_leave(message_json, eventrouter, team, channel, history_message):
message = SlackMessage("leave", message_json, team, channel) message = SlackMessage("leave", message_json, channel)
channel.store_message(message) channel.store_message(message)
channel.user_left(message_json["user"]) channel.user_left(message_json["user"])
return message return message
def subprocess_channel_topic(message_json, eventrouter, team, channel, history_message): def subprocess_channel_topic(message_json, eventrouter, team, channel, history_message):
message = SlackMessage("topic", message_json, team, channel) message = SlackMessage("topic", message_json, channel)
channel.store_message(message) channel.store_message(message)
channel.set_topic(message_json["topic"]) channel.set_topic(message_json["topic"])
return message return message
@ -3464,10 +3469,13 @@ def process_reply(message_json, eventrouter, team, channel, metadata):
reply_to = int(message_json["reply_to"]) reply_to = int(message_json["reply_to"])
original_message_json = team.ws_replies.pop(reply_to, None) original_message_json = team.ws_replies.pop(reply_to, None)
if original_message_json: if original_message_json:
original_message_json.update(message_json)
channel = team.channels[original_message_json.get('channel')]
process_message(original_message_json, eventrouter, team=team, channel=channel, metadata={})
dbg("REPLY {}".format(message_json)) dbg("REPLY {}".format(message_json))
channel = team.channels[original_message_json.get('channel')]
if message_json["ok"]:
original_message_json.update(message_json)
process_message(original_message_json, eventrouter, team=team, channel=channel, metadata={})
else:
print_error("Couldn't send message to channel {}: {}".format(channel.name, message_json["error"]))
else: else:
dbg("Unexpected reply {}".format(message_json)) dbg("Unexpected reply {}".format(message_json))
@ -3588,7 +3596,7 @@ def process_subteam_updated(subteam_json, eventrouter, team, channel, metadata):
if config.notify_usergroup_handle_updated and current_subteam_info.handle != new_subteam_info.handle: if config.notify_usergroup_handle_updated and current_subteam_info.handle != new_subteam_info.handle:
message = 'User group {old_handle} has updated its handle to {new_handle} in team {team}.'.format( message = 'User group {old_handle} has updated its handle to {new_handle} in team {team}.'.format(
name=current_subteam_info.handle, handle=new_subteam_info.handle, team=team.name) old_handle=current_subteam_info.handle, new_handle=new_subteam_info.handle, team=team.name)
team.buffer_prnt(message, message=True) team.buffer_prnt(message, message=True)
@ -3929,7 +3937,7 @@ def resolve_ref(ref):
else: else:
token = token.replace('_pretty', '') token = token.replace('_pretty', '')
if token in token_to_format: if token in token_to_format:
return ref_datetime.strftime(token_to_format[token]) return decode_from_utf8(ref_datetime.strftime(token_to_format[token]))
else: else:
return match.group(0) return match.group(0)
@ -5128,8 +5136,13 @@ def create_slack_debug_buffer():
def load_emoji(): def load_emoji():
try: try:
DIR = w.info_get('weechat_dir', '') weechat_dir = w.info_get('weechat_dir', '')
with open('{}/weemoji.json'.format(DIR), 'r') as ef: weechat_sharedir = w.info_get('weechat_sharedir', '')
local_weemoji, global_weemoji = ('{}/weemoji.json'.format(path)
for path in (weechat_dir, weechat_sharedir))
path = (global_weemoji if os.path.exists(global_weemoji) and
not os.path.exists(local_weemoji) else local_weemoji)
with open(path, 'r') as ef:
emojis = json.loads(ef.read()) emojis = json.loads(ef.read())
if 'emoji' in emojis: if 'emoji' in emojis:
print_error('The weemoji.json file is in an old format. Please update it.') print_error('The weemoji.json file is in an old format. Please update it.')
@ -5635,10 +5648,10 @@ if __name__ == "__main__":
if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE,
SCRIPT_DESC, "script_unloaded", ""): SCRIPT_DESC, "script_unloaded", ""):
weechat_version = w.info_get("version_number", "") or 0 weechat_version = int(w.info_get("version_number", "") or 0)
weechat_upgrading = w.info_get("weechat_upgrading", "") weechat_upgrading = w.info_get("weechat_upgrading", "")
if int(weechat_version) < 0x1030000: if weechat_version < 0x1030000:
w.prnt("", "\nERROR: Weechat version 1.3+ is required to use {}.\n\n".format(SCRIPT_NAME)) w.prnt("", "\nERROR: Weechat version 1.3+ is required to use {}.\n\n".format(SCRIPT_NAME))
elif weechat_upgrading == "1": elif weechat_upgrading == "1":
w.prnt("", "NOTE: wee-slack will not work after running /upgrade until it's" w.prnt("", "NOTE: wee-slack will not work after running /upgrade until it's"
@ -5663,7 +5676,8 @@ if __name__ == "__main__":
w.hook_config(CONFIG_PREFIX + ".*", "config_changed_cb", "") w.hook_config(CONFIG_PREFIX + ".*", "config_changed_cb", "")
w.hook_config("irc.look.server_buffer", "config_server_buffer_cb", "") w.hook_config("irc.look.server_buffer", "config_server_buffer_cb", "")
w.hook_modifier("input_text_for_buffer", "input_text_for_buffer_cb", "") if weechat_version < 0x2090000:
w.hook_modifier("input_text_for_buffer", "input_text_for_buffer_cb", "")
EMOJI, EMOJI_WITH_SKIN_TONES_REVERSE = load_emoji() EMOJI, EMOJI_WITH_SKIN_TONES_REVERSE = load_emoji()
setup_hooks() setup_hooks()

View File

@ -19,7 +19,7 @@ suggestion_delimiter_word = cyan
commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic" commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic"
default_dict = "en" default_dict = "en"
during_search = off during_search = off
enabled = on enabled = off
real_time = off real_time = off
suggestions = 2 suggestions = 2
word_min_length = 2 word_min_length = 2

View File

@ -25,6 +25,30 @@ trigger = green
trigger_disabled = red trigger_disabled = red
[trigger] [trigger]
autojoin.arguments = "*,irc_in_join"
autojoin.command = "/autojoinem add ${server} ${channel};/mute save"
autojoin.conditions = ""
autojoin.enabled = on
autojoin.hook = signal
autojoin.post_action = none
autojoin.regex = ""
autojoin.return_code = ok
autojoinem_on_quit.arguments = "quit"
autojoinem_on_quit.command = "/allchan /autojoinem add"
autojoinem_on_quit.conditions = ""
autojoinem_on_quit.enabled = on
autojoinem_on_quit.hook = signal
autojoinem_on_quit.post_action = none
autojoinem_on_quit.regex = ""
autojoinem_on_quit.return_code = ok
autopart.arguments = "*,irc_in_part"
autopart.command = "/autojoinem del ${server} ${channel};/mute save"
autopart.conditions = ""
autopart.enabled = on
autopart.hook = signal
autopart.post_action = none
autopart.regex = ""
autopart.return_code = ok
beep.arguments = "" beep.arguments = ""
beep.command = "/print -beep" beep.command = "/print -beep"
beep.conditions = "${tg_highlight} || ${tg_msg_pv}" beep.conditions = "${tg_highlight} || ${tg_msg_pv}"
@ -33,14 +57,6 @@ beep.hook = print
beep.post_action = none beep.post_action = none
beep.regex = "" beep.regex = ""
beep.return_code = ok beep.return_code = ok
chansaver.arguments = "buffer_closed;buffer_opened"
chansaver.command = "/mute /autojoin --run;/mute /save"
chansaver.conditions = ""
chansaver.enabled = on
chansaver.hook = signal
chansaver.post_action = none
chansaver.regex = ""
chansaver.return_code = ok
cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth"
cmd_pass.command = "" cmd_pass.command = ""
cmd_pass.conditions = "" cmd_pass.conditions = ""
@ -97,14 +113,6 @@ msg_auth.hook = modifier
msg_auth.post_action = none msg_auth.post_action = none
msg_auth.regex = "==^(.*(id|identify|register|ghost +[^ ]+|release +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" msg_auth.regex = "==^(.*(id|identify|register|ghost +[^ ]+|release +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}"
msg_auth.return_code = ok msg_auth.return_code = ok
pong.arguments = ""
pong.command = "pong"
pong.conditions = "${type} == private && ${tg_message} == ping"
pong.enabled = on
pong.hook = print
pong.post_action = none
pong.regex = ""
pong.return_code = ok
resize_big.arguments = "signal_sigwinch" resize_big.arguments = "signal_sigwinch"
resize_big.command = "/bar show nicklist" resize_big.command = "/bar show nicklist"
resize_big.conditions = "${info:term_width} >= 100" resize_big.conditions = "${info:term_width} >= 100"

View File

@ -361,8 +361,6 @@ default.window = "3;1;0;0;core;weechat"
default.current = on default.current = on
[notify] [notify]
irc.bitlbee.#tilde.zone_@ben = highlight
irc.bitlbee.#twitter_nebsirrah = highlight
irc.server.tilde = highlight irc.server.tilde = highlight
perl.highmon = none perl.highmon = none