File: mqtt_notify.py

package info (click to toggle)
weechat-scripts 20180330-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 5,072 kB
  • sloc: python: 44,904; perl: 27,389; ruby: 2,101; lisp: 339; tcl: 244; sh: 8; makefile: 7
file content (56 lines) | stat: -rw-r--r-- 1,739 bytes parent folder | download
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
# -*- coding: utf-8 -*-
# vim: ai ts=4 sts=4 et sw=4 nu


from __future__ import (unicode_literals, absolute_import,
                        division, print_function)


import weechat as w
import paho.mqtt.client as mqtt
import json

SCRIPT_NAME = 'mqtt_notify'
SCRIPT_AUTHOR = 'Guillaume Subiron <maethor@subiron.org>'
SCRIPT_VERSION = '0.2'
SCRIPT_LICENSE = 'WTFPL'
SCRIPT_DESC = 'Sends notifications using MQTT'

w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE,
           SCRIPT_DESC, '', '')

DEFAULT_OPTIONS = {
    'mqtt_host': 'localhost',
    'mqtt_port': '1883',
    'mqtt_timeout': '60',
    'mqtt_user': '',
    'mqtt_password': '',
    'mqtt_channel': 'weechat',
}

for key, val in DEFAULT_OPTIONS.items():
    if not w.config_is_set_plugin(key):
        w.config_set_plugin(key, val)

w.hook_print("", "notify_message", "", 1, "on_msg", "")
w.hook_print("", "notify_private", "", 1, "on_msg", "private")
w.hook_print("", "notify_highlight", "", 1, "on_msg", "")  # Not sure if needed


def on_msg(*a):
    keys = ['data', 'buffer', 'timestamp', 'tags', 'displayed', 'highlight',
            'sender', 'message']
    msg = dict(zip(keys, a))
    msg['buffer'] = w.buffer_get_string(msg['buffer'], 'short_name')

    cli = mqtt.Client()
    if w.config_get_plugin('mqtt_user'):
        cli.username_pw_set(w.config_get_plugin('mqtt_user'),
                            password=w.config_get_plugin('mqtt_password'))
    cli.connect(w.config_get_plugin('mqtt_host'),
                int(w.config_get_plugin('mqtt_port')),
                int(w.config_get_plugin('mqtt_timeout')))
    cli.publish(w.config_get_plugin('mqtt_channel'),
                json.dumps(msg), retain=True)

    return w.WEECHAT_RC_OK