I'm trying to write a previous messages bot for (he)xchat. Saving and printing the messages is fine, but when it sends it doesn't retain the message.
I've tried all sorts of methods to fix it but it's always blank.
Problem area:
for y in range(0, 14):
if msg_last[y]:
msg_to_say = 'privmsg ' + triggernick + ' <previously_bot> '
msg_to_say = msg_to_say + msg_last[y]
print (msg_to_say)
destination.command(msg_to_say)
Inside of Xchat it'll print:
privmsg <nick> <previously_bot> $msg
but upon sending it it'll be:
privmsg <nick> <previously_bot>
Can anyone spot what I've missed?
Full code:
from random import randint
import xchat
__module_name__ = "Blake's Previous Messages Bot"
__module_version__ = " v0.1 "
__module_description__ = "A previous message bot"
print("\0034", __module_name__, __module_version__, __module_description__, "!\003")
#---Globals---#000000#FFFFFF----------------------------------------------------
msg_last = [str()] * 15
msg_count = 0
def on_chat(word, word_eol, userdata):
global msg_count
global msg_last
msg = word[1]
if msg_count == 15:
#print ("Full, reloading list")
for x in range(0, 14):
msg_last[x + 1] = msg_last[x]
msg_last[0] = msg
msg_count = 0
msg_last[msg_count] = msg
msg_count = msg_count + 1
def on_join(word, word_eol, userdata):
global msg_last
triggernick, triggerchannel, triggerhost = word
destination = xchat.get_context()
print ("Someone joined, pulling up log")
for y in range(0, 14):
if msg_last[y]:
msg_to_say = 'privmsg ' + triggernick + ' <previously_bot> '
msg_to_say = msg_to_say + msg_last[y]
print (msg_to_say)
destination.command(msg_to_say)
return xchat.EAT_ALL
def on_kevin(word, word_eol, userdata):
triggernick, triggerchannel, triggerhost = word
destination = xchat.get_context()
if triggernick == 'TenEighths':
rnd = randint(0,2)
if rnd == 2:
rnd2 = randint(0,3)
rnd_str = heyYouKevin()
destination.command("say " + rnd_str)
#print ("Someone joined, pulling up log")
def heyYouKevin(x):
return {
'0': 'be quiet Kevin',
'1': 'omg TenEighths, will you be quiet already?',
'2': 'Kevin is spouting nonsense',
'3': "be quiet, TenEighths.",
}[x]
xchat.hook_print('Join', on_join)
xchat.hook_print('Channel Message', on_chat)
xchat.hook_print('Channel Message', on_kevin)
If you use the raw irc command PRIVMSG the syntax requires that any strings with spaces start with :
. So PRIVMSG nick :This is a long string
. The better solution is to just use xchat.command('msg nick ...')
since it knows what to do.