about summary refs log tree commit diff
path: root/weechat/.weechat/python
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2018-08-15 00:59:51 -0400
committerBen Harris <ben@tilde.team>2018-08-15 00:59:57 -0400
commit3b52f17af913c30e4b9d6ff3ac4640715a2f88f1 (patch)
tree86e5944f758a7a52f19a1f2687b9acd0212f522e /weechat/.weechat/python
parent225c5fcbe67b8221ee6a7cf3a1485b56005667b2 (diff)
remove apply_corrections
Diffstat (limited to 'weechat/.weechat/python')
-rw-r--r--weechat/.weechat/python/apply_corrections.py33
-rw-r--r--weechat/.weechat/python/autojoin.py11
l---------weechat/.weechat/python/autoload/autosavekey.py1
-rw-r--r--weechat/.weechat/python/autosavekey.py263
4 files changed, 290 insertions, 18 deletions
diff --git a/weechat/.weechat/python/apply_corrections.py b/weechat/.weechat/python/apply_corrections.py
index 2fd8b5c..078fc1b 100644
--- a/weechat/.weechat/python/apply_corrections.py
+++ b/weechat/.weechat/python/apply_corrections.py
@@ -58,9 +58,14 @@
 
 # History:
 #
+# 2018-06-21, Chris Johnson <raugturi@gmail.com>:
+#     version 1.3: support python3
 # 2014-05-10, Sébastien Helleu <flashcode@flashtux.org>
 #     version 1.2: change hook_print callback argument type of
 #                  displayed/highlight (WeeChat >= 1.0)
+# 2013-06-24, Chris Johnson <raugturi@gmail.com>:
+#     version 1.2: declare SCRIPT_ variables before imports since one was being
+#                  used there
 # 2012-10-09, Chris Johnson <raugturi@gmail.com>:
 #     version 1.1: change some more variable names for clarity/consistency
 # 2012-10-08, Chris Johnson <raugturi@gmail.com>:
@@ -91,6 +96,13 @@
 # 2012-08-30, Chris Johnson <raugturi@gmail.com>:
 #     version 0.1: initial release
 
+SCRIPT_NAME = 'apply_corrections'
+SCRIPT_AUTHOR = 'Chris Johnson <raugturi@gmail.com>'
+SCRIPT_VERSION = '1.3'
+SCRIPT_LICENSE = 'GPL3'
+SCRIPT_DESC = "When a correction (ex: s/typo/replacement) is sent, print the "\
+              "user's previous message(s) with the corrected text instead."
+
 import_ok = True
 
 try:
@@ -106,16 +118,9 @@ try:
     from operator import itemgetter
     from collections import defaultdict
 except ImportError as message:
-    print('Missing package(s) for %s: %s' % (SCRIPT_NAME, message))
+    print('Missing package(s) for {}: {}'.format(SCRIPT_NAME, message))
     import_ok = False
 
-SCRIPT_NAME = 'apply_corrections'
-SCRIPT_AUTHOR = 'Chris Johnson <raugturi@gmail.com>'
-SCRIPT_VERSION = '1.2'
-SCRIPT_LICENSE = 'GPL3'
-SCRIPT_DESC = "When a correction (ex: s/typo/replacement) is sent, print the "\
-              "user's previous message(s) with the corrected text instead."
-
 # Default settings for the plugin.
 settings = {'check_every': '5',
             'data_timeout': '60',
@@ -158,7 +163,7 @@ def get_corrected_messages(nick, log, correction):
         original = message.get('message', '')
         if original:
             try:
-                match = re.match(re.compile('.*%s.*' % pattern), original)
+                match = re.match(re.compile('.*{}.*'.format(pattern)), original)
             except:
                 match = original.find(pattern) != -1
             finally:
@@ -257,7 +262,7 @@ def handle_message_cb(data, buffer, date, tags, disp, hl, nick, message):
         valid_nick = r'([@~&!%+])?([-a-zA-Z0-9\[\]\\`_^\{|\}]+)'
         valid_correction = r's/[^/]*/[^/]*'
         correction_message_pattern = re.compile(
-                r'(%s:\s*)?(%s)(/)?$' % (valid_nick, valid_correction))
+                r'({}:\s*)?({})(/)?$'.format(valid_nick, valid_correction))
         match = re.match(correction_message_pattern, message)
 
         if match:
@@ -269,8 +274,8 @@ def handle_message_cb(data, buffer, date, tags, disp, hl, nick, message):
                 print_format = weechat.config_get_plugin('print_format')
                 for cm in get_corrected_messages(nick, log, correction):
                     corrected_msg = print_format
-                    for k, v in cm.iteritems():
-                        corrected_msg = corrected_msg.replace('[%s]' % k, v)
+                    for k, v in cm.items():
+                        corrected_msg = corrected_msg.replace('[{}]'.format(k), v)
                     weechat.prnt_date_tags(buffer, 0, 'no_log', corrected_msg)
         else:
             # If it's not a correction, store the message in LASTWORDS.
@@ -292,7 +297,7 @@ def load_config(data=None, option=None, value=None):
 
     # On initial load set any unset options to the defaults.
     if not option:
-        for option, default in settings.iteritems():
+        for option, default in settings.items():
             if not weechat.config_is_set_plugin(option):
                 weechat.config_set_plugin(option, default)
 
@@ -344,7 +349,7 @@ if __name__ == '__main__' and import_ok:
         desc_options()
 
         # Register hook to run load_config when options are changed.
-        weechat.hook_config('plugins.var.python.%s.*' % SCRIPT_NAME,
+        weechat.hook_config('plugins.var.python.{}.*'.format(SCRIPT_NAME),
                             'load_config', '')
 
         # Register hook_print to process each new message as it comes in.
diff --git a/weechat/.weechat/python/autojoin.py b/weechat/.weechat/python/autojoin.py
index 61449ff..f231307 100644
--- a/weechat/.weechat/python/autojoin.py
+++ b/weechat/.weechat/python/autojoin.py
@@ -46,6 +46,9 @@
 # 2016-01-13, The fox in the shell <KellerFuchs@hashbang.sh>
 #     version 0.2.6: Support keeping chan list as secured data
 #
+# 2018-08-09, Julien Palard <julien@palard.fr>
+#     version 0.3.0: Support for Python 3
+
 # @TODO: add options to ignore certain buffers
 # @TODO: maybe add an option to enable autosaving on part/join messages
 
@@ -54,7 +57,7 @@ import re
 
 SCRIPT_NAME    = "autojoin"
 SCRIPT_AUTHOR  = "xt <xt@bash.no>"
-SCRIPT_VERSION = "0.2.6"
+SCRIPT_VERSION = "0.3.0"
 SCRIPT_LICENSE = "GPL3"
 SCRIPT_DESC    = "Configure autojoin for all servers according to currently joined channels"
 SCRIPT_COMMAND = "autojoin"
@@ -91,7 +94,7 @@ def autosave_channels_on_quit(signal, callback, callback_data):
     items = find_channels()
 
     # print/execute commands
-    for server, channels in items.iteritems():
+    for server, channels in items.items():
         process_server(server, channels)
 
     return w.WEECHAT_RC_OK
@@ -105,7 +108,7 @@ def autosave_channels_on_activity(signal, callback, callback_data):
     items = find_channels()
 
     # print/execute commands
-    for server, channels in items.iteritems():
+    for server, channels in items.items():
         nick = w.info_get('irc_nick', server)
 
         pattern = "^:%s!.*(JOIN|PART) :?(#[^ ]*)( :.*$)?" % nick
@@ -130,7 +133,7 @@ def autojoin_cb(data, buffer, args):
         run = False
 
     # print/execute commands
-    for server, channels in items.iteritems():
+    for server, channels in items.items():
         process_server(server, channels, run)
 
     return w.WEECHAT_RC_OK
diff --git a/weechat/.weechat/python/autoload/autosavekey.py b/weechat/.weechat/python/autoload/autosavekey.py
new file mode 120000
index 0000000..fd537c7
--- /dev/null
+++ b/weechat/.weechat/python/autoload/autosavekey.py
@@ -0,0 +1 @@
+../autosavekey.py
\ No newline at end of file
diff --git a/weechat/.weechat/python/autosavekey.py b/weechat/.weechat/python/autosavekey.py
new file mode 100644
index 0000000..2a3b0ad
--- /dev/null
+++ b/weechat/.weechat/python/autosavekey.py
@@ -0,0 +1,263 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2013-2018 by nils_2 <weechatter@arcor.de>
+#
+# save channel key from protected channel(s) to autojoin or secure data
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# idea by freenode.elsae
+#
+# 2018-05-11: nils_2, (freenode.#weechat)
+#       0.4 : make script python3 compatible
+#           : add /help text
+#
+# 2015-05-09: nils_2, (freenode.#weechat)
+#       0.3 : fix: ValueError (reported by: Darpa)
+#
+# 2014-12-20: nils_2, (freenode.#weechat)
+#       0.2 : add option "add" to automatically add channel/key to autojoin option after a /join (idea by Prezident)
+#
+# 2013-10-03: nils_2, (freenode.#weechat)
+#       0.1 : initial release
+#
+# requires: WeeChat version 0.3.2
+#
+# Development is currently hosted at
+# https://github.com/weechatter/weechat-scripts
+
+try:
+    import weechat,re
+
+except Exception:
+    print("This script must be run under WeeChat.")
+    print("Get WeeChat now at: http://www.weechat.org/")
+    quit()
+
+SCRIPT_NAME     = "autosavekey"
+SCRIPT_AUTHOR   = "nils_2 <weechatter@arcor.de>"
+SCRIPT_VERSION  = "0.4"
+SCRIPT_LICENSE  = "GPL"
+SCRIPT_DESC     = "save channel key from protected channel(s) to autojoin option or secure data"
+
+OPTIONS         = { 'mute'        : ('off','execute command silently, only error messages will be displayed.'),
+                    'secure'      : ('off','change channel key in secure data.'),
+                    'add'         : ('off','adds channel and key to autojoin list on /join, if channel/key does not already exists'),
+                  }
+# /join #channel key
+# signal = freenode,irc_raw_in_324
+# signal_data = :asimov.freenode.net 324 nick #channel +modes key
+def irc_raw_in_324_cb(data, signal, signal_data):
+    parsed = get_hashtable(signal_data)
+    server = signal.split(',',1)[0]
+    argv = parsed['arguments'].split(" ")
+
+    # buffer without channel key
+    if len(argv) < 4:
+        return weechat.WEECHAT_RC_OK
+
+    channel = argv[1]
+    new_key = argv[3]
+
+    autojoin_list = get_autojoin(server)
+    if not autojoin_list:
+        return weechat.WEECHAT_RC_OK
+
+    # check autojoin for space
+    if len(re.findall(r" ", autojoin_list)) > 1:
+        weechat.prnt('', '%s%s: autojoin format for server "%s" invalid (two or more spaces).' % (weechat.prefix('error'),SCRIPT_NAME,server) )
+        return weechat.WEECHAT_RC_OK
+
+    # no keylist, only channels in autojoin option
+    if len(re.findall(r" ", autojoin_list)) == 0:
+        argv_channels = autojoin_list.split(',')
+        argv_keys = []
+    else:
+        # split autojoin option to a channel and a key list
+        arg_channel,arg_keys = autojoin_list.split(' ')
+        argv_channels = arg_channel.split(',')
+        argv_keys = arg_keys.split(',')
+
+    # check channel position
+    try:
+        channel_position = argv_channels.index(channel)
+    except ValueError:
+        channel_position = -1
+
+    sec_data = 0
+    # does buffer already exist in autojoin list?
+    if channel_position >= 0:
+        # remove channel from list
+        argv_channels.pop(channel_position)
+        # check if there is at least one key in list
+        if len(argv_keys) >= 1:
+            # check channel position and number of keys
+            if channel_position <= len(argv_keys):
+                # remove key from list
+                sec_data = check_key_for_secure(argv_keys,channel_position)
+                sec_data_name = argv_keys[channel_position][11:-1]
+                argv_keys.pop(channel_position)
+    else:
+        if OPTIONS['add'].lower() == 'off':
+            return weechat.WEECHAT_RC_OK
+
+    # add channel and key at first position
+    argv_channels.insert(0, channel)
+    argv_keys.insert(0,new_key)
+
+
+    # check weechat version and if secure option is on and secure data will be used for this key?
+    if int(version) >= 0x00040200 and OPTIONS['secure'].lower() == 'on' and sec_data == 1:
+        weechat.command('','%s/secure set %s %s' % (use_mute(),sec_data_name,new_key))
+    else:
+        if sec_data == 1:
+            weechat.prnt('', '%s%s: key for channel "%s.%s" not changed! option "plugins.var.python.%s.secure" is off and you are using secured data for key.' % (weechat.prefix('error'),SCRIPT_NAME,server,channel,SCRIPT_NAME) )
+            return weechat.WEECHAT_RC_OK
+        new_joined_option = '%s %s' % (','.join(argv_channels),','.join(argv_keys))
+        save_autojoin_option(server,new_joined_option)
+    return weechat.WEECHAT_RC_OK
+
+# replace an already existing channel key with an new one
+# when OP changes channel key
+def irc_raw_in_mode_cb(data, signal, signal_data):
+    parsed = get_hashtable(signal_data)
+
+    server = signal.split(',',1)[0]
+    argv = parsed['arguments'].split(" ")
+
+    if argv[1] != "+k":
+        return weechat.WEECHAT_RC_OK
+
+    channel = argv[0]
+    new_key = argv[2]
+
+    add_key_to_list(server,channel,new_key)
+    return weechat.WEECHAT_RC_OK
+
+def add_key_to_list(server,channel,new_key):
+    autojoin_list = get_autojoin(server)
+    if not autojoin_list:
+        return weechat.WEECHAT_RC_OK
+
+    # check autojoin for space
+    if len(re.findall(r" ", autojoin_list)) == 0:
+        weechat.prnt('', '%s%s: no password(s) set in autojoin for server "%s".' % (weechat.prefix('error'),SCRIPT_NAME,server) )
+        return weechat.WEECHAT_RC_OK
+    if len(re.findall(r" ", autojoin_list)) > 1:
+        weechat.prnt('', '%s%s: autojoin format for server "%s" invalid (two or more spaces).' % (weechat.prefix('error'),SCRIPT_NAME,server) )
+        return weechat.WEECHAT_RC_OK
+
+
+    # split autojoin option to a channel and a key list
+    arg_channel,arg_keys = autojoin_list.split(' ')
+    argv_channels = arg_channel.split(',')
+    argv_keys = arg_keys.split(',')
+
+    # search for channel name in list of channels and get position
+    if channel in argv_channels:
+        channel_pos_in_list = argv_channels.index(channel)
+        # enough keys in list? list counts from 0!
+        if channel_pos_in_list + 1 > len(argv_keys):
+            weechat.prnt('', '%s%s: not enough keys in list or channel position is not valid. check out autojoin option for server "%s".' % (weechat.prefix('error'),SCRIPT_NAME,server) )
+            return weechat.WEECHAT_RC_OK
+
+        sec_data = check_key_for_secure(argv_keys,channel_pos_in_list)
+
+        # check weechat version and if secure option is on and secure data will be used for this key?
+        if int(version) >= 0x00040200 and OPTIONS['secure'].lower() == 'on' and sec_data == 1:
+            sec_data_name = argv_keys[channel_pos_in_list][11:-1]
+            weechat.command('','%s/secure set %s %s' % (use_mute(),sec_data_name,new_key))
+        else:
+            if sec_data == 1:
+                weechat.prnt('', '%s%s: key for channel "%s.%s" not changed! option "plugins.var.python.%s.secure" is off and you are using secured data for key.' % (weechat.prefix('error'),SCRIPT_NAME,server,channel,SCRIPT_NAME) )
+                return weechat.WEECHAT_RC_OK
+            argv_keys[channel_pos_in_list] = new_key
+            new_joined_option = '%s %s' % (','.join(argv_channels),','.join(argv_keys))
+            save_autojoin_option(server,new_joined_option)
+    return weechat.WEECHAT_RC_OK
+
+def get_hashtable(string):
+    parsed = weechat.info_get_hashtable('irc_message_parse', dict(message=string))
+    try:
+        parsed['message'] = parsed['arguments'].split(' :', 1)[1]
+    except:
+        parsed['message'] = ""
+    return parsed
+
+def get_autojoin(server):
+    return weechat.config_string(weechat.config_get('irc.server.%s.autojoin' % server))
+
+def find_element_in_list(element,list_element):
+        try:
+            index_element=list_element.index(element)
+            return index_element
+        except ValueError:
+            return -1
+
+def save_autojoin_option(server,new_joined_option):
+    weechat.command('','%s/set irc.server.%s.autojoin %s' % (use_mute(),server,new_joined_option))
+
+def use_mute():
+    use_mute = ''
+    if OPTIONS['mute'].lower() == 'on':
+        use_mute = '/mute '
+    return use_mute
+
+# check key for "${sec.data."
+def check_key_for_secure(argv_keys,position):
+    sec_data = 0
+    if argv_keys[position][0:11] == '${sec.data.':
+        sec_data = 1
+    return sec_data
+
+def cmd_autosavekey(data, buffer, args):
+    weechat.command('', '/help %s' % SCRIPT_NAME)
+    return weechat.WEECHAT_RC_OK
+
+# ================================[ weechat options & description ]===============================
+def init_options():
+    for option,value in OPTIONS.items():
+        if not weechat.config_is_set_plugin(option):
+            weechat.config_set_plugin(option, value[0])
+            OPTIONS[option] = value[0]
+        else:
+            OPTIONS[option] = weechat.config_get_plugin(option)
+        weechat.config_set_desc_plugin(option, '%s (default: "%s")' % (value[1], value[0]))
+
+def toggle_refresh(pointer, name, value):
+    global OPTIONS
+    option = name[len('plugins.var.python.' + SCRIPT_NAME + '.'):]        # get optionname
+    OPTIONS[option] = value                                               # save new value
+    return weechat.WEECHAT_RC_OK
+
+# ================================[ main ]===============================
+if __name__ == "__main__":
+    if weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, SCRIPT_DESC, '', ''):
+        weechat.hook_command(SCRIPT_NAME,SCRIPT_DESC,
+                             '',
+                             'You have to edit options with: /set *autosavekey*\n'
+                             'I suggest using /iset script or /fset plugin.\n',
+                             '',
+                             'cmd_autosavekey',
+                             '')
+        version = weechat.info_get("version_number", "") or 0
+
+        if int(version) >= 0x00030200:
+            init_options()
+            weechat.hook_config( 'plugins.var.python.' + SCRIPT_NAME + '.*', 'toggle_refresh', '' )
+            weechat.hook_signal("*,irc_raw_in_mode","irc_raw_in_mode_cb","")
+            weechat.hook_signal("*,irc_raw_in_324","irc_raw_in_324_cb","")
+        else:
+            weechat.prnt("","%s%s %s" % (weechat.prefix("error"),SCRIPT_NAME,": needs version 0.3.2 or higher"))
+            weechat.command("","/wait 1ms /python unload %s" % SCRIPT_NAME)