import json import os import re import asyncio import random import datetime from threading import Thread import discord from discord.ext import tasks from PIL import Image from colorama import Fore, Style import streamlit as st from huggingface_hub import InferenceClient, login import time import os async def syncMessages(): print(os.listdir(f"data")) if os.listdir("data") == []: return 0 with ph.container(): dirs = st.tabs(os.listdir("data")) i = -1 for dir in os.listdir("data"): i += 1 with dirs[i]: print(i, os.listdir(f"data/{dir}")) if os.listdir(f"data/{dir}") == []: return 0 files = st.tabs(os.listdir("data/" + dir)) k = -1 for file in os.listdir("data/" + dir): k += 1 with files[k]: with open(f"data/{dir}/{file}", "r") as f: o = f.read().split("<|end_of_turn|>") print(o) for item in o: if item == "": continue item = item.split(": ", 1) st.markdown(f":blue[{item[0].split('GPT4 Correct ')[1]}]: {item[1]}") lock_file_path = "test.txt" if not os.path.exists(lock_file_path): with open(lock_file_path, "w") as f: f.write("Running!") else: print("Streamlit app is already running, only streaming bot activity.") while True: syncMessages() time.sleep(0.1) try: os.mkdir("data") except: pass HF_TOKEN = os.environ["HF_TOKEN"] login(HF_TOKEN) SD = InferenceClient(model="stabilityai/stable-diffusion-2-1") LLM = InferenceClient(model="openchat/openchat-3.5-0106") def ec(x, fd="", sd=""): matches = re.findall(re.escape(fd) + "(.*?)" + re.escape(sd), x) matches = matches if matches else [""] return matches intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) launch_time = datetime.datetime.utcnow() ph = st.empty() @client.event async def on_ready(): print(f"Logged in as {client.user}") presence.start() @tasks.loop(seconds=60) async def presence(): delta_uptime = datetime.datetime.utcnow() - launch_time hours, remainder = divmod(int(delta_uptime.total_seconds()), 3600) minutes, seconds = divmod(remainder, 60) days, hours = divmod(hours, 24) print(f"Online Time: {days:02d}d | {hours:02d}h | {minutes:02d}m | {seconds:02d}s") await client.change_presence( status=discord.Status.dnd, activity=discord.Activity( type=discord.ActivityType.playing, large_image="https://i.imgur.com/Kk2BvJg.jpg", large_text="This is Game Icon", name="Escaping the IRS.", details="", state=f"Running for {days:02d}d | {hours:02d}h | {minutes:02d}m", ), ) @client.event async def on_message(message): await syncMessages() for user in message.mentions: message.content = message.content.replace(f"<@{user.id}>", f"@{str(user)}") try: msgchannel = message.channel try: msgchannel_name = msgchannel.name guild = message.guild guild_name = guild.name except: guild_name = "Direct" msgchannel_name = message.author.display_name s = f":green[{message.author}]: :violet[{message.content}] :blue[{msgchannel_name}] :orange[{guild_name}]" if message.author == client.user: return sysp = """You are Lyre, a helpful discord chatbot. Respond in markdown. Your username is lyre#9828.""" try: os.mkdir("data/" + guild_name) except: pass try: with open(f"data/{guild_name}/{msgchannel_name}", "a") as f: n = "\n" f.write( f"""GPT4 Correct {message.author.name}: {message.content.strip(n)}<|end_of_turn|>""" ) except error: with open(f"data/{guild_name}/{msgchannel_name}", "w") as f: f.write( f"GPT4 Correct system: {sysp}<|end_of_turn|>GPT4 Correct {message.author}: {message.content}<|end_of_turn|>" ) finally: with open(f"data/{guild_name}/{msgchannel_name}", "r") as f: context = f.read() await syncMessages() if "Feeway" in guild_name: context += f"GPT4 Correct Assistant:" title = ec(context, "", "")[0] output = LLM.text_generation(context, stop_sequences=["<|end_of_turn|>"], max_new_tokens=4096) with open(f"data/{guild_name}/{msgchannel_name}", "a") as f: f.write(f"GPT4 Correct Assistant: {output}<|end_of_turn|>") embed = discord.Embed(title=title, description=output.replace( f"{title}", ""), color=0x1E81B0) embed.set_footer( text= """Information or code generated by Lyre may not always be correct. Lyre was made by Araeyn.""" ) e = await message.reply(embed=embed) except Exception as e: print(Fore.RED) print(e) print(Style.RESET_ALL) token = os.environ["TOKEN"] client.run(token)