forked from foxo/printer_bot
87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
|
from config import *
|
||
|
|
||
|
# On IRC, we have to use exclamation marks for commands, because otherwise they can overrule
|
||
|
|
||
|
import irc.bot
|
||
|
import irc.strings
|
||
|
from irc.client import ip_numstr_to_quad, ip_quad_to_numstr
|
||
|
import os
|
||
|
import requests
|
||
|
|
||
|
print(IRC_SERVER)
|
||
|
|
||
|
|
||
|
class TestBot(irc.bot.SingleServerIRCBot):
|
||
|
def __init__(self, channel, nickname, server, port=6667):
|
||
|
irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname)
|
||
|
self.channel = channel
|
||
|
|
||
|
def on_nicknameinuse(self, c, e):
|
||
|
c.nick(c.get_nickname() + "_")
|
||
|
|
||
|
def on_welcome(self, c, e):
|
||
|
c.join(self.channel)
|
||
|
|
||
|
def on_privmsg(self, c, e):
|
||
|
self.do_command(e, e.arguments[0])
|
||
|
|
||
|
def on_pubmsg(self, c, e):
|
||
|
a = e.arguments[0].split(":", 1)
|
||
|
if len(a) > 1 and irc.strings.lower(a[0]) == irc.strings.lower(
|
||
|
self.connection.get_nickname()
|
||
|
):
|
||
|
self.do_command(e, a[1].strip())
|
||
|
return
|
||
|
|
||
|
def on_dccmsg(self, c, e):
|
||
|
# non-chat DCC messages are raw bytes; decode as text
|
||
|
text = e.arguments[0].decode('utf-8')
|
||
|
c.privmsg("You said: " + text)
|
||
|
|
||
|
def on_dccchat(self, c, e):
|
||
|
if len(e.arguments) != 2:
|
||
|
return
|
||
|
args = e.arguments[1].split()
|
||
|
if len(args) == 4:
|
||
|
try:
|
||
|
address = ip_numstr_to_quad(args[2])
|
||
|
port = int(args[3])
|
||
|
except ValueError:
|
||
|
return
|
||
|
self.dcc_connect(address, port)
|
||
|
|
||
|
def do_command(self, e, cmd):
|
||
|
nick = e.source.nick
|
||
|
c = self.connection
|
||
|
"""
|
||
|
if cmd == "disconnect":
|
||
|
self.disconnect()
|
||
|
elif cmd == "die":
|
||
|
self.die()
|
||
|
elif cmd == "stats":
|
||
|
for chname, chobj in self.channels.items():
|
||
|
c.notice(nick, "--- Channel statistics ---")
|
||
|
c.notice(nick, "Channel: " + chname)
|
||
|
users = sorted(chobj.users())
|
||
|
c.notice(nick, "Users: " + ", ".join(users))
|
||
|
opers = sorted(chobj.opers())
|
||
|
c.notice(nick, "Opers: " + ", ".join(opers))
|
||
|
voiced = sorted(chobj.voiced())
|
||
|
c.notice(nick, "Voiced: " + ", ".join(voiced))
|
||
|
elif cmd == "dcc":
|
||
|
dcc = self.dcc_listen()
|
||
|
c.ctcp(
|
||
|
"DCC",
|
||
|
nick,
|
||
|
f"CHAT chat {ip_quad_to_numstr(dcc.localaddress)} {dcc.localport}",
|
||
|
)
|
||
|
"""
|
||
|
if cmd.startswith("print"):
|
||
|
r = requests.get(cmd.split(" ")[1:][0], allow_redirects=True)
|
||
|
open(IMAGE_PATH, 'wb').write(r.content)
|
||
|
os.system(PRINT_COMMAND)
|
||
|
else:
|
||
|
c.notice(nick, "Not understood: " + cmd)
|
||
|
|
||
|
bot = TestBot("printer", "printerbottest", IRC_SERVER, IRC_PORT)
|
||
|
bot.start()
|