107 lines
3.3 KiB
Python
107 lines
3.3 KiB
Python
# Released into the Public Domain
|
|
|
|
import random
|
|
#from threading import Thread
|
|
#from time import sleep
|
|
import weechat
|
|
|
|
SCRIPT_NAME = "masshl"
|
|
SCRIPT_AUTHOR = "The Krusty Krab <wowaname@volatile.ch>"
|
|
SCRIPT_VERSION = "1.0"
|
|
SCRIPT_LICENSE = "Public domain"
|
|
SCRIPT_DESC = "Provides nicklist hooks."
|
|
|
|
if weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION,
|
|
SCRIPT_LICENSE, SCRIPT_DESC, "", ""):
|
|
weechat.hook_command("masshl",
|
|
SCRIPT_DESC,
|
|
"[-do <delay>] text (broken, currently no-op)",
|
|
"-d Specify a delay at the beginning (e.g. -d 1 for\n"
|
|
" one second) to insert a delay between messages.\n"
|
|
" %n - replace with next nick\n"
|
|
" %N - replace with as many nicks as possible per line\n"
|
|
" %r - replace with random hex value to thwart antispam\n"
|
|
"-o Include your own nick in output",
|
|
"-od", "masshl_cmd_cb", "")
|
|
|
|
class Loop():
|
|
def __init__(self, buffer, nicks, input, input_method, N_param, delay, opts):
|
|
self.buffer = buffer
|
|
self.nicks = nicks
|
|
self.input = input
|
|
self.input_method = input_method
|
|
self.N_param = N_param
|
|
self.delay = delay
|
|
self.opts = opts
|
|
|
|
def run(self):
|
|
i = -('o' not in self.opts)
|
|
if i == -1: self.nicks.pop(0)
|
|
N_nicks = ""
|
|
output = self.input
|
|
for nick in self.nicks:
|
|
i += 1
|
|
if self.N_param:
|
|
N_nicks += " %s" % nick
|
|
if (nick != self.nicks[-1] and
|
|
len(output) + len(N_nicks) + len(self.nicks[i]) < 300):
|
|
continue
|
|
else: output = self.input.replace("%n",nick)
|
|
N_nicks = N_nicks.lstrip()
|
|
output = output.replace("%N",N_nicks)
|
|
output = output.replace("%r","%08x" % random.randint(0,0xffffffff))
|
|
if self.input_method == "keybinding":
|
|
weechat.buffer_set(self.buffer, "input", output)
|
|
else:
|
|
weechat.command(self.buffer, output)
|
|
# sleep(self.delay)
|
|
output = self.input
|
|
N_nicks = ""
|
|
|
|
def masshl_cmd_cb(data, buffer, args):
|
|
input = args
|
|
|
|
input_method = "command"
|
|
server = weechat.buffer_get_string(buffer, 'localvar_server')
|
|
channel = weechat.buffer_get_string(buffer, 'localvar_channel')
|
|
|
|
if not input or (input[0] == '-' and input.find(' ') == -1):
|
|
input = (input + ' ' if input else '') + weechat.buffer_get_string(buffer, "input")
|
|
input_method = "keybinding"
|
|
|
|
N_param = "%N" in input
|
|
if not N_param and "%n" not in input and "%r" not in input:
|
|
# if we bind this to Enter key, we don't want useless flooding on
|
|
# normal messages
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
optstop = input and input[0] == '-' and input.find(' ')
|
|
opts = input[1:optstop] if optstop else ''
|
|
cmdstop = 'd' in opts and input.find(' ', optstop+1)
|
|
delay = 0
|
|
if 'd' in opts:
|
|
find = input[optstop+1:cmdstop]
|
|
where = input.find(find, cmdstop+1)
|
|
try: delay = float(find)
|
|
except ValueError:
|
|
weechat.prnt(buffer, "delay must be a float value!")
|
|
return weechat.WEECHAT_RC_ERROR
|
|
input = input[where+len(find):]
|
|
else: input = input[optstop+bool(optstop):]
|
|
|
|
nicklist = weechat.infolist_get("irc_nick", "", "%s,%s" % (server,channel))
|
|
|
|
# dealing with the cursor can get a little tricky. let's use a dict
|
|
# instead, that way we can manipulate just what we need and we can
|
|
# do that with builtins
|
|
nicks = []
|
|
while weechat.infolist_next(nicklist):
|
|
nicks.append(weechat.infolist_string(nicklist, "name"))
|
|
|
|
weechat.infolist_free(nicklist)
|
|
|
|
workhorse = Loop(buffer, nicks, input, input_method, N_param, delay, opts)
|
|
workhorse.run()
|
|
|
|
return weechat.WEECHAT_RC_OK
|