Call notify-send when a message is received.
Author: manzerbredes
— Version: 0.1.0
— License: GPL-3.0-or-later
For WeeChat ≥ 0.3.0, requires: libnotify.
Tags: notify, py2, py3
Added: 2018-11-11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | # Project: chanotify # Description: A library that call notify-send when message is received # on specific server or channel # Author: manzerbredes <manzerbredes@gmx.com> # License: GPL3 # # 0.1.0 # First version, please ask for feature or bugs on my email ! import weechat as weechat NAME="chanotify" VERSION="0.1.0" LICENCE="GPL3" AUTHOR="manzerbredes" DESCRIPTION="Call notify-send command when receive a message on a specific server and channel." HOMEPAGE="http://people.rennes.inria.fr/Loic.Guegan" CONFIG= { "filters": ("*:*", "List of <server>:<channel> separated by comma that will where chanotify will notify. \ Note that <server> or <channel> can be * to match every server or channel."), "status": ("on", "On/Off chanotify") } # Convenient variables CHANNEL_BYPASS=list() # Contain channels name that will be automatically notified SERVER_BYPASS=list() # Contain servers name that will be automatically notifier ALL_BYPASS=False # If true every server and channel will be notified FILTERS=dict() # Contain list of channels associated with each servers # Parse filters parameters def parse_filters(filters): global CHANNEL_BYPASS global SERVER_BYPASS global ALL_BYPASS global FILTERS elts=filters.split(",") for elt in elts: server, channel=elt.split(":") if server==channel and server=="*": ALL_BYPASS=True elif server == "*": CHANNEL_BYPASS.append(channel) elif channel == "*": SERVER_BYPASS.append(server) else: if server in FILTERS: FILTERS[server].append(channel) else: FILTERS[server]=[channel] def isNotifiable(server,channel): global CHANNEL_BYPASS global SERVER_BYPASS global ALL_BYPASS global FILTERS global CONFIG if CONFIG["status"][0]=="on": if (channel in CHANNEL_BYPASS) or (server in SERVER_BYPASS) or ALL_BYPASS: return True else: if server in FILTERS: return (channel in FILTERS[server]) return False def on_receive(data, signal, signal_data): # Fetch server, msg and buffer server = signal.split(",")[0] msg = weechat.info_get_hashtable("irc_message_parse", {"message": signal_data}) buffer = weechat.info_get("irc_buffer", "%s,%s" % (server, msg["channel"])) # Notify if we get the buffer if buffer and isNotifiable(server,msg["channel"]): notify_title="On "+msg["channel"] notify_msg=msg["nick"]+"> "+msg["text"] weechat.hook_process_hashtable("notify-send", { "arg1": "-i", "arg2": "weechat", "arg3": "-a", "arg4": "WeeChat", "arg5": notify_title, "arg6": notify_msg}, 20000, "", "") return weechat.WEECHAT_RC_OK # Load the configuration def update_config(data, option, value): global CONFIG option=option.split(".")[-1] if option != "filters": CONFIG[option]=(value,CONFIG[option][1]) else: # Reset existing filter configuration and set them CHANNEL_BYPASS=list() SERVER_BYPASS=list() ALL_BYPASS=False FILTERS=dict() parse_filters(CONFIG["filters"][0]) return weechat.WEECHAT_RC_OK # Load the script if __name__ == "__main__": # Register plugin weechat.register(NAME, AUTHOR, VERSION, LICENCE, DESCRIPTION, "", "UTF-8") # Load or set configuration for (option,value) in CONFIG.items(): c = weechat.config_get_plugin(option) if len(c) == 0: # Set weechat.config_set_plugin(option, value[0]) else: # Load CONFIG[option]=(c,CONFIG[option][1]) # Watch config changes weechat.hook_config("*%s.*"%NAME, "update_config", "") # Parse filters parse_filters(CONFIG["filters"][0]) # Watch incoming message weechat.hook_signal("*,irc_in2_privmsg", "on_receive", "") |