# -*- coding: utf-8 -*- import weechat SCRIPT_NAME = "delphi_auto_away_op" SCRIPT_AUTHOR = "Copilot" SCRIPT_VERSION = "1.0" SCRIPT_LICENSE = "MIT" SCRIPT_DESC = "Deop on away, re-op on return" SERVER = "Delphi" def process_channels(away): infolist = weechat.infolist_get("irc_channel", "", "") while weechat.infolist_next(infolist): server = weechat.infolist_string(infolist, "server") channel = weechat.infolist_string(infolist, "name") nick = weechat.infolist_string(infolist, "nick") if server != SERVER: continue nick_infolist = weechat.infolist_get( "irc_nick", "", "%s,%s,%s" % (server, channel, nick) ) if weechat.infolist_next(nick_infolist): prefix = weechat.infolist_string(nick_infolist, "prefix") weechat.prnt("", "DEBUG prefix=%s" % prefix) opped = "@" in prefix if away: if opped: weechat.prnt( "", "AutoAwayOp: removing op from %s on %s" % (nick, channel) ) weechat.command( "", "/quote MODE %s -o %s" % (channel, nick) ) else: if not opped: weechat.prnt( "", "AutoAwayOp: restoring op to %s on %s" % (nick, channel) ) weechat.command( "", "/quote MODE %s +o %s" % (channel, nick) ) weechat.infolist_free(nick_infolist) weechat.infolist_free(infolist) def away_cb(data, signal, signal_data): weechat.prnt("", "DEBUG: Received AWAY") process_channels(True) return weechat.WEECHAT_RC_OK def back_cb(data, signal, signal_data): weechat.prnt("", "DEBUG: Received BACK") process_channels(False) return weechat.WEECHAT_RC_OK if weechat.register( SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, SCRIPT_DESC, "", "", ): weechat.hook_signal("Delphi,irc_in2_306", "away_cb", "") weechat.hook_signal("Delphi,irc_in2_305", "back_cb", "")