1
0
Fork 0
forked from swee/MeowNex
MeowNex/sweebot.py

612 lines
29 KiB
Python
Raw Normal View History

2024-10-12 15:58:11 -07:00
__version__ = "0.0.1 Link parser update"
2024-09-10 21:47:28 -07:00
import socket
import subprocess
from time import sleep, time, ctime
2024-09-22 13:14:17 -07:00
from os import system as ossystem, path, environ, listdir, getcwd
2024-09-22 13:21:56 -07:00
import sqlite3
2024-09-22 13:14:17 -07:00
cwd = getcwd()
2024-09-10 21:47:28 -07:00
import re
from random import choice, randint as random
import traceback
import threading
2024-10-02 21:56:40 -07:00
from pathlib import Path
2024-10-12 16:11:43 -07:00
from requests import get, exceptions as rex
2024-10-12 15:19:19 -07:00
from bs4 import BeautifulSoup
2024-10-12 15:50:22 -07:00
headers = {
2024-10-12 15:53:35 -07:00
'User-Agent': 'SweeBot IRC ' + __version__
2024-10-12 15:50:22 -07:00
}
2024-09-22 13:14:17 -07:00
class config:
def __init__(self):
2024-09-22 13:20:12 -07:00
self.conn = sqlite3.connect(environ["SBconfig"])
2024-09-22 13:18:15 -07:00
self.database = self.conn.cursor()
2024-09-22 13:14:17 -07:00
def perms(self, cloak: str):
try:
2024-10-12 14:28:11 -07:00
self.database.execute(f"SELECT * FROM users WHERE username = ?;", [cloak])
2024-09-22 13:14:17 -07:00
output = self.database.fetchall()
return output[0][1]
except:
2024-09-22 13:47:08 -07:00
print(traceback.format_exc())
2024-09-22 13:14:17 -07:00
return ''
2024-10-12 14:25:36 -07:00
def chansettings(self, chan: str):
try:
2024-10-12 14:28:11 -07:00
self.database.execute("SELECT * FROM chans WHERE chan = ?;", [chan])
2024-10-12 14:25:36 -07:00
output = self.database.fetchall()
2024-10-12 15:25:22 -07:00
print(output)
2024-10-12 14:25:36 -07:00
temp = output[0][1].split(",")
return temp if temp != [''] else []
except:
print(traceback.format_exc())
return []
def setchanconfig(self, chan: str, flags: list):
try:
2024-10-12 15:26:29 -07:00
print(self.chansettings(chan))
2024-10-12 14:25:36 -07:00
if self.chansettings(chan) == []:
print("[!!!] Channel doesn't exist in config")
2024-10-12 15:46:27 -07:00
self.database.execute("INSERT INTO chans (chan, flags) values(?, ?);", [chan, "+config," + ",".join(flags)])
2024-10-12 14:53:38 -07:00
else:
self.database.execute("UPDATE chans SET FLAGS = ? WHERE chan = ?", [",".join(flags),chan])
2024-10-12 14:38:58 -07:00
self.conn.commit()
2024-10-12 14:25:36 -07:00
except:
print(traceback.format_exc())
return False
2024-10-12 14:50:59 -07:00
def cflagexist(self, chan:str, flag:str):
return flag in self.chansettings(chan)
2024-10-12 14:25:36 -07:00
2024-09-22 13:49:56 -07:00
2024-09-10 21:47:28 -07:00
# Code snippet from my buddy Irish
# Define a dictionary to map terminal color codes to IRC color codes
color_map = {
'\033[30m': '\x0301', # Black
'\033[31m': '\x0305', # Red
'\033[32m': '\x0303', # Green
'\033[33m': '\x0307', # Yellow
'\033[34m': '\x0302', # Blue
'\033[35m': '\x0306', # Magenta
'\033[36m': '\x0310', # Cyan
'\033[37m': '\x0315', # White
'\033[90m': '\x0314', # Bright Black (Gray)
'\033[91m': '\x0304', # Bright Red
'\033[92m': '\x0309', # Bright Green
'\033[93m': '\x0308', # Bright Yellow
'\033[94m': '\x0312', # Bright Blue
'\033[95m': '\x0313', # Bright Magenta
'\033[96m': '\x0311', # Bright Cyan
'\033[97m': '\x0316', # Bright White
'\033[0m': '\x03', # Reset
}
pattern = re.compile(r'\033\[\d+(;\d+)*m|\033\[\?25[lh]|\033\[\?7[lh]|\033\[\d+C|\033\[\d+A|\033\[\d+D|\033\[\d+B')
def replace_color_codes(text):
def replacer(match):
code = match.group(0)
if code in color_map:
return color_map[code]
elif re.match(r'\033\[\d+C', code):
# Handle cursor move right (e.g., \033[30C)
spaces = int(re.findall(r'\d+', code)[0])
return ' ' * spaces
elif re.match(r'\033\[\d+A', code) or re.match(r'\033\[\d+B', code):
# Handle cursor move up (e.g., \033[17A) and down (e.g., \033[17B)
return ''
elif re.match(r'\033\[\d+D', code):
# Handle cursor move to the start of the line (e.g., \033[9999999D)
return ''
elif re.match(r'\033\[\?25[lh]', code):
# Handle cursor visibility (e.g., \033[?25l or \033[?25h)
return ''
elif re.match(r'\033\[\?7[lh]', code):
# Handle line wrapping (e.g., \033[?7l or \033[?7h)
return ''
else:
return ''
# Remove all control sequences
cleaned_text = pattern.sub(replacer, text)
# Split the text into lines and remove lines that contain control sequences or are empty
lines = cleaned_text.split('\n')
lines = [line for line in lines if line.strip() and not re.search(r'\033\[m', line)]
# Join the cleaned lines back into a single string
return '\n'.join(lines)
class bot_irc:
irc_socket = socket.socket()
def __init__(self):
self.irc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def send_irc(self, channel, msg):
self.irc_socket.send(bytes("PRIVMSG " + channel + " :" + msg + "\n", "UTF-8"))
2024-09-10 21:47:28 -07:00
def connect_irc(self, server, port, channel, bot_nick, bot_pass, bot_nickpass):
print("Server connection: " + server)
self.irc_socket.connect((server, port))
self.irc_socket.send(
bytes(
"USER " + bot_nick + " " + bot_nick + " " + bot_nick + " :SweeBot, a very cool bot made by Swee :3\n",
"UTF-8",
)
)
self.irc_socket.send(bytes("NICK " + bot_nick + "\n", "UTF-8"))
self.irc_socket.send(
bytes("PASS " + bot_nickpass + ":" + bot_pass + "\n", "UTF-8")
)
for i in channel:
self.irc_socket.send(bytes("JOIN " + i + "\n", "UTF-8"))
def response_irc(self):
try:
r = self.irc_socket.recv(2040).decode()
if r.find("PING") != -1:
self.irc_socket.send(
bytes("PONG " + r.split()[1] + "\r\n", "UTF-8")
)
return r
except:
return ""
def ping(self):
try:
r = self.irc_socket.recv(2040).decode()
if r.find("PING") != -1:
self.irc_socket.send(
bytes("PONG " + r.split()[1] + "\r\n", "UTF-8")
)
except:
pass
server_irc = "127.0.0.1" # Use 127.0.0.1 for local ZNC
port_irc = 6667 # NO SSL FOR YOU
channel_irc = ["##sweezero"]
botnick_irc = environ.get('SBnick')
botnickpass_irc =environ.get('SBuser')
botpass_irc = environ.get('SBpass')
irc = bot_irc()
irc2 = bot_irc()
irc3 = bot_irc()
irc.connect_irc(
server_irc, port_irc, channel_irc, botnick_irc, botpass_irc, botnickpass_irc
)
2024-09-22 13:14:17 -07:00
sbconfig = config()
2024-09-10 21:47:28 -07:00
threes = [":3", ":3c", "uwu", "owo", "/ᐠ。ꞈ。ᐟ\\", "(✿◠‿◠)"]
snacks = ["PepperMintHTMLs", "Dice App candies", "SweeCrypt codes", "Windows 11 Bloomberry flavored icecream"]
run = 0
block = 0
global times
times = 0
def update():
2024-10-02 21:56:40 -07:00
open(str(Path.home()) + "/run.txt", 'w').write(str(run))
open(str(Path.home()) + "/block.txt", 'w').write(str(block))
2024-09-10 21:47:28 -07:00
update()
def irci2():
irc2.connect_irc(
server_irc, port_irc, channel_irc, "sweeB0t", botpass_irc, botnickpass_irc + "/secondary"
)
while True:
irc2.ping()
def irci3():
irc3.connect_irc(
server_irc, port_irc, channel_irc, "swe3Bot", botpass_irc, botnickpass_irc + "/tertiary"
)
while True:
irc3.ping()
def multiline(text, channel):
global times
if text.__class__ == bytes:
text = text.decode()
for t in text.split("\n"):
if t != "" and t != " ":
if times > 8:
if times == 9:
sleep(1)
irc3.send_irc(channel, replace_color_codes(t))
times +=1
if times == 13:
times = 0
elif times > 4:
if times == 5:
sleep(1)
irc2.send_irc(channel, replace_color_codes(t))
times +=1
else:
if times==0:
sleep(1)
irc.send_irc(channel, replace_color_codes(t))
times += 1
def system(cmd, chan):
try:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, b''):
if text != "" and text != " ":
multiline(line.rstrip(), chan)
p.stdout.close()
p.wait()
except FileNotFoundError:
multiline(cmd[0] + " not found", chan)
except:
multiline(traceback.format_exc())
irl2 = threading.Thread(target=irci2)
irl2.start()
irl3 = threading.Thread(target=irci3)
irl3.start()
while True:
teext = irc.response_irc().split("\r\n")
for text in teext:
if text != "":
try:
print(text)
except:
print("")
try:
command = text.split("PRIVMSG")[1].split(":")[1:]
command = ":".join(command).split(" ")
channel = text.split("PRIVMSG")[1].split(" ")[1]
nick = text.split(" ")[0][1:].split("!")[0]
username = text.split(" ")[0][1:].split("@")[1]
try:
2024-09-22 13:47:08 -07:00
perms = sbconfig.perms(username)
2024-09-10 21:47:28 -07:00
except:
perms = ""
print(command)
print(channel)
print(nick)
print(username)
print(perms)
#open("log-text-"+channel, "a").write(" ".join(command) + "\n")
#open("log-name-"+channel, "a").write(nick + "\n")
except:
#print(traceback.format_exc())
pass
try:
#if True:
if "PRIVMSG" in text:
if "PRIVMSG" in text and command[0][0] == "$":
run+=1
update()
if command[0] == "$ping":
if random(1,2) == 1:
irc.send_irc(channel, nick + ": Pnog")
else:
irc.send_irc(channel, nick + ": Pong")
elif command[0] == "$help":
if len(command) > 1:
if "." in " ".join(command[1:]):
irc.send_irc(channel, nick + ": Nice try")
block+=1
run-=1
update()
else:
2024-09-22 14:11:53 -07:00
try:
if path.isfile(cwd + "/helps/" + " ".join(command[1:])):
output = open(cwd + "/helps/" + " ".join(command[1:])).read()
2024-10-12 16:24:59 -07:00
multiline(output, nick if sbconfig.cflagexist(channel, "-multiline") else channel)
2024-09-22 14:11:53 -07:00
else:
irc.send_irc(channel, "Either the command isn't documented yet or it doesn't exist lol")
except:
multiline(output, channel)
2024-09-10 21:47:28 -07:00
else:
2024-09-22 13:59:28 -07:00
irc.send_irc(channel, "tip, ping, whoami, perms, version, figlet, tdfiglet, cowsay, uptime, cc, joke, botsnack. (restart, join, part, shell, config, pull.) Use '$help (command)' for explanation.")
2024-09-10 21:47:28 -07:00
elif command[0] == "$tip":
2024-09-22 14:22:26 -07:00
system(["fortune"], channel)
2024-09-10 21:47:28 -07:00
elif command[0] == "$whoami":
if perms != "":
irc.send_irc(channel, nick + ": " + username + " (Your cloak has permissions, use the 'perms' command to see)")
else:
irc.send_irc(channel, nick + ": " + username)
elif command[0] == "$perms":
if len(command) == 2:
2024-09-22 13:47:08 -07:00
if sbconfig.perms(command[1]) != "":
irc.send_irc(channel, nick + ": permissions of cloak " + command[1] + ": " + sbconfig.perms(command[1]))
2024-09-22 13:14:17 -07:00
else:
irc.send_irc(channel, nick + ": The cloak " + command[1] + " Doesn't have permissions.")
2024-09-10 21:47:28 -07:00
else:
if perms != "":
irc.send_irc(channel, nick + ": " + perms)
else:
irc.send_irc(channel, nick + ": none")
elif command[0] == "$restart":
if perms == "full" or "reboot" in perms.split(",") or "restart" in perms.split(","):
irc.send_irc(channel, nick + ": Restarting bot...")
sleep(1)
ossystem("sudo systemctl restart sweebot")
else:
irc.send_irc(channel, nick + ": Permission denied.")
block+=1
run-=1
update()
2024-09-22 13:52:02 -07:00
elif command[0] == "$pull":
2024-09-22 14:00:59 -07:00
if perms == "full" or "git" in perms.split(","):
2024-09-22 13:52:02 -07:00
ossystem("git fetch")
ossystem("git pull")
irc.send_irc(channel, nick + ": Pulled from Git, restarting bot...")
sleep(1)
ossystem("sudo systemctl restart sweebot")
else:
irc.send_irc(channel, nick + ": Permission denied.")
block+=1
run-=1
update()
2024-09-10 21:47:28 -07:00
elif command[0] == "$join":
if perms == "full" or "join" in perms.split(","):
if len(command) == 2:
irc.send_irc(channel, nick + ": Joining " + command[1])
irc.irc_socket.send(bytes("JOIN " + command[1] + "\n", "UTF-8"))
irc2.irc_socket.send(bytes("JOIN " + command[1] + "\n", "UTF-8"))
irc3.irc_socket.send(bytes("JOIN " + command[1] + "\n", "UTF-8"))
2024-10-12 17:19:09 -07:00
multiline(channel=command[1], text="A wild bot appears! ($join initiated by " + nick + ")")
2024-09-10 21:47:28 -07:00
else:
if len(command) == 1:
irc.send_irc(channel, nick + ": I NEED A CHANNEL NAME TO JOIN!!!")
else:
irc.send_irc(channel, nick + ": Y'know this only uses one argument? JUST THE CHANNEL NAME!!!")
else:
irc.send_irc(channel, nick + ": Permission denied.")
block+=1
run-=1
update()
elif command[0] == "$part":
if perms == "full" or "part" in perms.split(","):
if len(command) == 2:
irc.send_irc(channel, nick + ": Parting " + command[1])
irc.irc_socket.send(bytes("PART " + command[1] + "\n", "UTF-8"))
irc2.irc_socket.send(bytes("PART " + command[1] + "\n", "UTF-8"))
irc3.irc_socket.send(bytes("PART " + command[1] + "\n", "UTF-8"))
else:
if len(command) == 1:
irc.send_irc(channel, "Bye bye!")
sleep(1)
irc.irc_socket.send(bytes("PART " + channel + "\n", "UTF-8"))
irc2.irc_socket.send(bytes("PART " + channel + "\n", "UTF-8"))
irc3.irc_socket.send(bytes("PART " + channel + "\n", "UTF-8"))
else:
irc.send_irc(channel, nick + ": Y'know this only uses one or zero arguments?")
else:
irc.send_irc(channel, nick + ": Permission denied.")
block+=1
run-=1
update()
2024-09-29 11:32:40 -07:00
elif command[0] == "$socket":
if perms == "full":
if len(command) > 1:
irc.send_irc(channel, nick + ": Sending to socket...")
2024-09-29 11:36:59 -07:00
irc.irc_socket.send(bytes(" ".join(command[1:]) + "\n", "UTF-8"))
irc2.irc_socket.send(bytes(" ".join(command[1:]) + "\n", "UTF-8"))
irc3.irc_socket.send(bytes(" ".join(command[1:]) + "\n", "UTF-8"))
2024-09-29 11:32:40 -07:00
else:
irc.send_irc(channel, nick + ": what to send to the server?")
else:
irc.send_irc(channel, nick + ": Permission denied.")
block+=1
run-=1
update()
2024-09-10 21:47:28 -07:00
elif command[0] == "$shell":
if perms == "full":
#or "shell" in perms.split(",")
if len(command) > 1:
try:
system(command[1:], channel)
except Exception as ex:
multiline(traceback.format_exc(), channel)
else:
irc.send_irc(channel, nick + ": What do you want me to F-ing run in the shell?")
else:
irc.send_irc(channel, nick + ": Permission denied.")
block+=1
run-=1
update()
elif command[0] == "$version":
2024-09-11 15:17:18 -07:00
irc.send_irc(channel, "This is SweeBot " + __version__)
2024-09-10 21:47:28 -07:00
elif command[0] == "$figlet":
2024-10-12 16:22:17 -07:00
if not sbconfig.cflagexist(channel, "-multiline"):
if len(command) > 1:
try:
system(['figlet'] + command[1:], channel)
except Exception as ex:
irc.send_irc(channel, nick + ": " + ex.__class__.__name__)
else:
irc.send_irc(channel, nick + ": What text should I enlarge?")
2024-09-10 21:47:28 -07:00
else:
2024-10-12 16:22:17 -07:00
multiline("Multiline commands are disabled in this channel.", channel)
2024-09-10 21:47:28 -07:00
elif command[0] == "$tdfiglet":
2024-10-12 16:22:17 -07:00
if not sbconfig.cflagexist(channel, "-multiline"):
if len(command) > 1:
try:
system(['tdfiglet', '-cm', "-r"] + command[1:], channel)
except Exception as ex:
irc.send_irc(channel, nick + ": " + ex.__class__.__name__)
else:
irc.send_irc(channel, nick + ": What text should I enlarge?")
2024-09-10 21:47:28 -07:00
else:
2024-10-12 16:22:17 -07:00
multiline("Multiline commands are disabled in this channel.", channel)
2024-09-10 21:47:28 -07:00
elif command[0] == "$cowsay":
2024-10-12 16:22:17 -07:00
if not sbconfig.cflagexist(channel, "-multiline"):
if len(command) > 1:
try:
system(['cowsay'] + command[1:], channel)
except Exception as ex:
irc.send_irc(channel, nick + ": " + ex.__class__.__name__)
else:
irc.send_irc(channel, nick + ": What should the cow say?")
2024-09-10 21:47:28 -07:00
else:
2024-10-12 16:22:17 -07:00
multiline("Multiline commands are disabled in this channel.", channel)
2024-09-10 21:47:28 -07:00
elif command[0] == "$uptime":
try:
2024-10-10 16:36:18 -07:00
system(['uptime', '-p'], channel)
2024-09-10 21:47:28 -07:00
except Exception as ex:
irc.send_irc(channel, nick + ": " + ex.__class__.__name__)
elif command[0] == "$joke":
try:
system(['pyjoke'] + command[1:], channel)
except Exception as ex:
multiline(traceback.format_exc(), channel)
elif command[0] == "$botsnack":
multiline(f"\x01ACTION eats some {choice(snacks)}\x01", channel)
#elif command[0] == "$sed":
2024-09-10 21:47:28 -07:00
# if len(command) > 1:
#try:
# if True:
# com = ['sed',"" + command[1] + ""]
# print(command[1])
# texte = open("log-text-"+channel).read().split("\n")
# texte.reverse()
# texte.pop(0)
# texte.pop(0)
# print(texte)
# texttoreplace = ""
# j = 0
# broken = False
# for i in texte:
# if command[1].split("/")[1] in i:
# texttoreplace = i
# broken = True
# break
# j+=1
# if not broken:
# irc.send_irc(channel, "Unable to correct: '" + command[1].split("/")[1] + "' not found in any chat message.")
# continue
# namee = open("log-name-"+channel).read().split("\n")
# namee.reverse()
# namee.pop(0)
# namee.pop(0)
# namee = namee[j]
# open("temp","w").write(texttoreplace)
# com.append("temp")
# print(com)
# result = subprocess.run(com, stdout=subprocess.PIPE)
# output = result.stdout.decode('utf-8').split("\n")
# irc.send_irc(channel, "Correction using sed: <" + namee + "> " + output[0])
# #except Exception as ex:
# #irc.send_irc(channel, nick + ": " + ex.__class__.__name__)
# else:
# irc.send_irc(channel, nick + ": What to correct?")
elif command[0] == "$config":
2024-10-12 14:25:36 -07:00
try:
2024-10-12 14:38:58 -07:00
if len(command) > 1:
2024-10-12 14:25:36 -07:00
if perms == "full":
2024-10-12 14:44:00 -07:00
abort = False
2024-10-12 14:38:58 -07:00
flag = sbconfig.chansettings(channel)
2024-10-12 14:45:59 -07:00
for i in command[1:]:
2024-10-12 14:38:58 -07:00
if i == "clear":
flag = ["+config"]
2024-10-12 14:44:59 -07:00
elif i[0] == "+":
2024-10-12 14:38:58 -07:00
if "-" + i[1:] in flag:
flag[flag.index("-" + i[1:])] = i
2024-10-12 14:39:58 -07:00
else:
flag.append(i)
2024-10-12 14:38:58 -07:00
elif i[0] == "-":
if "+" + i[1:] in flag:
flag[flag.index("+" + i[1:])] = i
2024-10-12 14:39:58 -07:00
else:
flag.append(i)
2024-10-12 14:38:58 -07:00
else:
2024-10-12 14:42:01 -07:00
multiline(nick + ": flag name should begin with + or -", channel)
2024-10-12 14:44:00 -07:00
abort = True
2024-10-12 14:38:58 -07:00
break
2024-10-12 14:44:00 -07:00
if not abort:
print(flag)
sbconfig.setchanconfig(channel, flag)
multiline(nick + ": Successfuly applied configuration: " + " ".join(flag), channel)
2024-09-10 21:47:28 -07:00
else:
2024-10-12 14:25:36 -07:00
irc.send_irc(channel, nick + ": Permission denied")
block+=1
run-=1
update()
else:
multiline("Configuration for " + channel + ": " + " ".join(sbconfig.chansettings(channel)), channel)
except ex:
multiline(str(ex), channel)
2024-09-10 21:47:28 -07:00
else:
2024-10-12 17:18:12 -07:00
if ".." in command[0][:3]:
2024-09-10 21:47:28 -07:00
irc.send_irc(channel, nick + ": Nice try.")
block+=1
run-=1
update()
else:
2024-09-23 12:11:05 -07:00
if path.isfile("cc/" + command[0][1:]):
2024-09-10 21:47:28 -07:00
try:
2024-10-12 17:18:12 -07:00
if sbconfig.cflagexist(channel, "-multiline") and "#require-multiline" in open("cc/" + command[0][1:]).read():
irc.send_irc(channel, "Multiline commands are disabled in this channel.")
else:
com = ['python3']
comm = command
com.append("cc/" + comm[0][1:])
com.append(nick)
com.append(username)
comm.pop(0)
for i in comm:
com.append(i)
system(com, channel)
2024-09-10 21:47:28 -07:00
except Exception as ex:
irc.send_irc(channel, nick + ": " + ex.__class__.__name__)
2024-09-23 12:11:05 -07:00
elif path.isdir("cc/" + command[0][1:]):
2024-10-12 17:24:53 -07:00
irc.send_irc(channel, nick + ": Command list under cc/debug: " + ", ".join(listdir("cc/" + command[0][1:])) + ".")
2024-09-10 21:47:28 -07:00
else:
print(nick + ": Unrecognised command")
elif command[0] == ":3":
2024-10-12 14:50:59 -07:00
if not sbconfig.cflagexist(channel, "-colonthree"):
2024-10-12 17:42:37 -07:00
irc.send_irc(channel, ":3")
2024-09-10 21:47:28 -07:00
elif ":3c" in command:
2024-10-12 14:50:59 -07:00
if not sbconfig.cflagexist(channel, "-colonthree"):
2024-10-12 17:42:37 -07:00
multiline(channel, choice(threes))
2024-10-12 15:21:22 -07:00
# try to parse and find a link
if sbconfig.cflagexist(channel, "+links"):
2024-10-12 15:24:05 -07:00
try:
for i in command:
if i[:8] == "https://":
2024-10-12 16:11:43 -07:00
try:
e = get(i, headers=headers, timeout=10)
if e.ok:
soup = BeautifulSoup(e.text, 'html.parser')
2024-10-13 23:37:34 -07:00
multiline("(" + nick + ") " + (soup.title.string if soup.title != None else "[No title provided]"), channel)
2024-10-12 16:11:43 -07:00
else:
multiline("(" + nick + ") [HTTP " + str(e.status_code) + "]", channel)
except rex.SSLError as ex:
multiline("(" + nick + ") [SSL Error: " + str(ex.__cause__) + "]", channel)
2024-10-13 23:35:53 -07:00
except:
multiline("(" + nick + ") [Request error:" + str(ex.__cause__) + "]", channel)
2024-10-12 15:24:05 -07:00
elif i[:7] == "http://":
2024-10-12 15:53:35 -07:00
e = get(i, headers=headers, timeout=10)
2024-10-12 15:24:05 -07:00
if e.ok:
soup = BeautifulSoup(e.text, 'html.parser')
2024-10-13 23:37:34 -07:00
multiline("(" + nick + ") " + (soup.title.string if soup.title != None else "[No title provided]"), channel)
2024-10-12 15:24:05 -07:00
else:
2024-10-12 15:30:25 -07:00
multiline("(" + nick + ") [HTTP " + str(e.status_code) + "]", channel)
2024-10-12 15:24:05 -07:00
except:
print(traceback.format_exc())
2024-09-10 21:47:28 -07:00
elif "JOIN" in text and "#nixsanctuary" in text:
nick = text.split(":")[1].split("!")[0]
2024-10-12 16:22:17 -07:00
if not "swe" in nick:
2024-09-10 21:47:28 -07:00
irc.send_irc("##hiya", "hiya: " + nick + " has joined #nixsanctuary")
pass
except Exception as ex:
2024-10-12 16:22:17 -07:00
print(traceback.format_exc())