/usr/share/weechat/python/gntpnotify.py is in weechat-scripts 20131007-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | # -*- coding: utf-8 -*-
# Author: Ryan Feng <odayfans at gmail dot com>
# License: GPL3
# Version: 0.2
# Changelog
# 0.2:
# * Fewer error messages
import gntp.notifier as notifier
import weechat
import time
# Logging
def log(msg):
weechat.prnt("",msg)
# Register plugin
weechat.register("gntpnotify",
"Ryan Feng",
"0.2",
"GPL3",
"GNTP Notify: Growl notifications using python-gntp",
"",
"")
# Create hooks
weechat.hook_signal("*,irc_in2_PRIVMSG","private_msg","")
weechat.hook_signal("weechat_highlight","hilight_msg","")
growl = None
grow_loaded = False
last_log_time = None
log_period = 10 # Redisplay error log in 10s
error_log_max = 3 # Only show no more than 3 error messages in 10s
error_logged = 0
def connect():
global growl, grow_loaded, log_period, error_log_max, last_log_time, error_logged
# Create grow object
growl = notifier.GrowlNotifier(
applicationName = "Weechat",
notifications = ["irc message"],
defaultNotifications = ["irc message"],
)
try:
grow_loaded = growl.register()
except:
grow_loaded = False
if last_log_time is None:
last_log_time = time.time()
elapsed_time = time.time() - last_log_time
if elapsed_time >= log_period:
error_logged = 0
if error_logged < error_log_max:
log("Cannot create notifier object, please make sure Growl has started")
error_logged += 1
last_log_time = time.time()
return grow_loaded
def show_notification(title, message):
if not grow_loaded:
connect()
return
r = growl.notify(
noteType = "irc message",
title = title,
description = message,
sticky = False,
priority = 1
)
if not r:
log("Cannot send notification")
def private_msg(data, signal, message):
# message is a raw irc message sent from the server
message = message[1:]
# Get sender
sender = message[:message.find('!')-1]
# Get receiver
receiver = message.split()[2]
# Get message body
msg = message[message.find(':')+1:]
# Get the server which sent this message
server = signal.partition(',')[0]
# Ignore all PRIVMSGs send to a channel,the rest are messages send to 'me'
if not receiver.startswith('#'):
show_notification("%s @ #%s" % (sender,server),msg)
return weechat.WEECHAT_RC_OK
def hilight_msg(data, signal, message):
# TODO: Get the sender of the message and the channel where the highlight displayed
sender,_,tmp_msg = message.partition('\t')
_,_,msg = tmp_msg.partition(' ')
if grow_loaded:
show_notification("%s" % sender, msg)
else:
connect()
return weechat.WEECHAT_RC_OK
|