diff --git a/guild2.py b/guild2.py new file mode 100644 index 0000000..4222e71 --- /dev/null +++ b/guild2.py @@ -0,0 +1,270 @@ +# Colors +BLACK = '\033[30m' +RED = '\033[31m' +GREEN = '\033[32m' +YELLOW = '\033[33m' # orange on some systems +BLUE = '\033[34m' +MAGENTA = '\033[35m' +CYAN = '\033[36m' +LIGHT_GRAY = '\033[37m' +DARK_GRAY = '\033[90m' +BRIGHT_RED = '\033[91m' +BRIGHT_GREEN = '\033[92m' +BRIGHT_YELLOW = '\033[93m' +BRIGHT_BLUE = '\033[94m' +BRIGHT_MAGENTA = '\033[95m' +BRIGHT_CYAN = '\033[96m' +WHITE = '\033[97m' +RESET = '\033[0m' +print("[" + BLUE + "..." + RESET + "] Importing Guilded.py...") +import guilded +print("[" + BLUE + "..." + RESET + "] Importing System modules...") +import traceback +from time import sleep +from requests import get +from random import randint, choice +import os +import sys +print("[" + BLUE + "..." + RESET + "] Importing Platform & distro...") +import platform +import distro +print("[" + BLUE + "..." + RESET + "] Importing DuckDuckGo search...") +from duckduckgo_search import DDGS +import subprocess +from characterai import pycai +client = guilded.Client() +#C.AI +caitoken = os.environ["CAItoken"] +caibot= os.environ["CAImodel"] +while True: + try: + cai = pycai.Client(caitoken) + me = cai.get_me() + chat = cai.connect() + chats = [] + break + except: + pass +# Help document +documentation = """$help - Shows this message. +$ping - Test if bot is online. +$version - Get version of SweeBot and the system it's running on +$whoami - Gets your user ID +$perms - Gets your permissions +$search - Preform a websearch via DuckDuckGo +$ai-chat - Preform an AI chat powered by Character.AI +""" +meows = ['Meow!', 'Nyaa~', 'Mrow.', 'Prr! :3', 'Hiss!', "Mrrp?", "Mreow.", "!woeM", "3: !rrP", "!ssiH", "~aayN", "Mew!", "Moew!"] +version = "0.0.2 patch 2 (AI update) (Open-source patch)" +# user permissions +def getperms(userID): + if not os.path.isfile(str(userID)): + open(str(userID),'w').write("") + return [] + else: + if open(str(userID)).read().replace("\n", "").split(",") == ['']: + return [] + return open(str(userID)).read().replace("\n", "").split(",") +class SweeBotTestException(Exception): + pass +class SweeBotSystemException(Exception): + pass +class SweeBotAIException(Exception): + pass +# Client itself +@client.event +async def on_ready(): + print('[' + GREEN + 'OK' + RESET + '] Ready') + +@client.event +async def on_message(message): + ai = False + ai_ = None + ai__ = 0 + for i in message.replied_to: + h = 0 + for j in chats: + print(i.id) + print(j['messages']) + if i.id in j['messages']: + ai = True + ai_ = j['cai'] + ai__ = h + break + h+=1 + if message.author.name != client.user.name: + if message.content == "": + return + if message.author == None: + print(YELLOW + "Gil ("+message.channel.name+"@"+message.server.name+")> "+RESET+message.content) + else: + print(YELLOW + "<"+message.author.name+" ("+message.channel.name+"@"+message.server.name+ " {" + message.server.id +"})> "+RESET+message.content) + if message.author.name == client.user.name or message.author.bot: + return + if ai: + try: + chat = cai.connect() + if message.content == "$more": + mess = await message.reply(embed=guilded.Embed(title=":sweebot-loading: Requesting more...")) + message2 = chat.send_message( + caibot, ai_.chat_id, "" + ) + await mess.edit(embed=guilded.Embed(title=":sweebot-success: Requested more.", description=message2.text)) + chats[ai__]['messages'].append(mess.id) + else: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-loading: Replying...")) + message2 = chat.send_message( + caibot, ai_.chat_id, "--Guilded receive--\n" + "<" + message.author.name + "> " + message.content + ) + await mess.edit(embed=guilded.Embed(title=":sweebot-success: Successfully replied.", description=message2.text)) + chats[ai__]['messages'].append(mess.id) + except: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-fail: Command failed!",description=traceback.format_exc())) + print("[" + RED + "FAIL" + RESET + "] Command failed, check chat for traceback.") + elif message.content[0] == "$": + try: + command=message.content[1:].split(" ") + if command[0] == "help": + await message.reply(embed=guilded.Embed(title=":sweebot-success: SweeBot usage:",description=documentation)) + print("[" + GREEN + "OK" + RESET + "] '$help' executed successfully.") + elif command[0] == "ping": + if randint(0,2) == 1: + print("[" + MAGENTA + "DBG" + RESET + "] Pnog easter egg.") + mess = await message.reply(embed=guilded.Embed(title=":sweebot-success: Command complete.",description="Pnog.")) + else: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-success: Command complete.",description="Pong.")) + print("[" + GREEN + "OK" + RESET + "] '$ping' executed successfully.") + elif command[0] == "version": + if platform.system() == "Windows": + print("[" + MAGENTA + "DBG" + RESET + "] Host runs Windows.") + mess = await message.reply(embed=guilded.Embed(title=":sweebot: for :guilded: " + version +" running on:",description=":desktop_computer: " + platform.node() + "\n:sweedows: " + platform.system() + " " + platform.release() + " Version " + platform.version() + "\n:guilded: Guilded.py version " + guilded.__version__ + "\n:gear: Python " + sys.version.split(" ")[0])) + else: + print("[" + MAGENTA + "DBG" + RESET + "] Host runs Linux.") + if "ubuntu" in distro.name().lower(): + emoticon = ":ubuntu:" + elif "debian" in distro.name().lower(): + emoticon = ":debian:" + else: + emoticon = ":tux-linux:" + mess = await message.reply(embed=guilded.Embed(title=":sweebot: for :guilded: " + version +" running on:",description=":desktop_computer: " + platform.node() + "\n" + emoticon + " " + distro.name() + " " + distro.version() + " " + distro.codename() + "\n:guilded: Guilded.py version " + guilded.__version__ + "\n:gear: Python " + sys.version.split(" ")[0])) + print("[" + GREEN + "OK" + RESET + "] '$version' executed successfully.") + elif command[0] == "restart": + if "restart" in getperms(message.author.id) or "full" in getperms(message.author.id): + mess = await message.reply(embed=guilded.Embed(title=":sweebot-success: Command complete.",description="Restarting bot...")) + print("[" + BLUE + "..." + RESET + "] Restarting script... (initiated by " + message.author.name + ")") + if os.path.isfile("/home/swee/.config/systemd/user/guild.service"): + os.system("systemctl --user restart guild.service") + else: + subprocess.Popen(["py"] + sys.argv) + exit() + else: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-fail: Permission denied.")) + print("[" + RED + "FAIL" + RESET + "] Not restarting script, Permission Denied for " + message.author.name) + elif command[0] == "shell": + if "full" in getperms(message.author.id): + mess = await message.reply("```No output (yet)```") + print("[" + BLUE + "..." + RESET + "] Running shell... (initiated by " + message.author.name + ")") + sleep(1) + p = subprocess.Popen(command[1:], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + output = "" + for line in iter(p.stdout.readline, b''): + output+=line.decode() + await mess.edit("```\n" + output +"```") + p.stdout.close() + p.wait() + await mess.edit("```\n" + output +"```\n\n**Finished.**") + else: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-fail: Permission denied.")) + print("[" + RED + "FAIL" + RESET + "] Not restarting script, Permission Denied for " + message.author.name) + elif command[0] == "spammy-shell": + if "full" in getperms(message.author.id): + mess = await message.reply("```No output (yet)```") + print("[" + BLUE + "..." + RESET + "] Running shell... (initiated by " + message.author.name + ")") + sleep(1) + p = subprocess.Popen(command[1:], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + output = "" + first = True + for line in iter(p.stdout.readline, b''): + if first: + await mess.edit("```" + line.decode().rstrip() +"```") + first = False + else: + await message.channel.send("```" + line.decode().rstrip() +"```") + p.stdout.close() + p.wait() + await message.channel.send("**Finished.**") + else: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-fail: Permission denied.")) + print("[" + RED + "FAIL" + RESET + "] Not restarting script, Permission Denied for " + message.author.name) + + elif command[0] == "whoami": + if getperms(message.author.id) != []: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-success: Command complete.",description=":gear: UserID: "+str(message.author.id)+"\n:warning: Your User ID has permissions, use `$perms` to see")) + else: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-success: Command complete.",description=":gear: UserID: "+str(message.author.id))) + print("[" + GREEN + "OK" + RESET + "] '$whoami' executed successfully.") + elif command[0] == "perms": + if getperms(message.author.id) != []: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-success: Command complete.",description="`"+",".join(getperms(message.author.id))+"`")) + else: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-success: Command complete.",description=":question: No permissions")) + print("[" + GREEN + "OK" + RESET + "] '$perms' executed successfully.") + elif command[0] == "meow": + mess = await message.reply(embed=guilded.Embed(title=choice(meows))) + print("[" + GREEN + "OK" + RESET + "] '$meow' executed successfully.") + elif command[0] == "figlet": + result = subprocess.run(["figlet"] + command[1:], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output = (result.stdout.decode('utf-8')+result.stderr.decode('utf-8')) + mess = await message.reply("```\n" + output + "\n```") + print("[" + GREEN + "OK" + RESET + "] '$figlet' executed successfully.") + elif command[0] == "error": + raise SweeBotTestException("Test Error for SweeBot") + elif command[0] == "search": + request = [] + while request == []: + request = DDGS().text(" ".join(command[1:])) + result = [] + print(request) + for i in request: + if len(result) != 3: + result.append("") + h = len(result) - 1 + result[h] += "[" + i['title'] + '](' + i['href'] + ")\n\n" + result[h] += "" + i['href'] + result[h] += "\n\n" + i['body'] + "\n\n" + else: + break + result.append("Please check out [UnnamedSearchEngine](https://swee.pythonanywhere.com/use) btw, it's a very lightweight and private search engine.") + print(result) + embeds = [] + for i in result: + embeds.append(guilded.Embed(description=i)) + await message.reply("Search results:" ,embed=guilded.Embed(description="\n".join(result))) + print("[" + GREEN + "OK" + RESET + "] '$search' executed successfully.") + elif command[0] == "ai-chat": + chat = cai.connect() + mess = await message.reply(embed=guilded.Embed(title=":sweebot-loading: Creating new AI chat.")) + new, answer = chat.new_chat( + caibot, me.id + ) + text = " ".join(command[1:]) + message2 = chat.send_message( + caibot, new.chat_id, "--Guilded receive--\n" + "<" + message.author.name + ">" + text + ) + await mess.edit(embed=guilded.Embed(title=":sweebot-success: New AI chat created.", description=message2.text)) + chats.append({"messages": [mess.id], "cai": new}) + elif command[0] == "more": + raise SweeBotAIException("Please reply to an AI message with `$more` instead of calling it without a reply.") + else: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-unknown: Command not found.")) + + except Exception as ex: + mess = await message.reply(embed=guilded.Embed(title=":sweebot-fail: Command failed!",description=traceback.format_exc())) + print("[" + RED + "FAIL" + RESET + "] Command failed, check chat for traceback.") + else: + print("[" + MAGENTA + "DBG" + RESET + "] No triggers in message, ignoring...") +print("[" + BLUE + "..." + RESET + "] Now running the bot...") +try: + client.run(os.environ["SBtoken"]) +except: + print("[ERR] Client failed to run") \ No newline at end of file