LevelBot / app.py
lunarflu's picture
lunarflu HF staff
Update app.py
c7ed7f7
raw
history blame
2.89 kB
import os
import threading
import discord
import matplotlib.pyplot as plt
from io import BytesIO
import gradio_client
import gradio as gr
from gradio_client import Client
import json
import time
from discord import app_commands
from discord.ext import commands
# HF GUILD SETTINGS
MY_GUILD_ID = 879548962464493619
MY_GUILD = discord.Object(id=MY_GUILD_ID)
DISCORD_TOKEN = os.environ.get("DISCORD_TOKEN", None)
class Bot(commands.Bot):
"""This structure allows slash commands to work instantly."""
def __init__(self):
super().__init__(command_prefix="/", intents=discord.Intents.all())
async def setup_hook(self):
await self.tree.sync(guild=discord.Object(MY_GUILD_ID))
print(f"Synced slash commands for {self.user}.")
client = Bot()
XP_PER_MESSAGE = 10
xp_data = {}
@client.event
async def on_ready():
print(f"Logged in as {client.user} (ID: {client.user.id})")
print("------")
@client.event
async def on_message(message):
try:
global xp_data
if message.author.bot:
return
if message.author.id not in xp_data:
xp_data[message.author.id] = 0
old = xp_data[message.author.id]
new = old + XP_PER_MESSAGE
xp_data[message.author.id] = new
level = calculate_level(new)
print(f"{message.author} xp: {xp_data[message.author.id]}")
print(f"{message.author} level: {level}")
print(f"xp_data: {xp_data}")
except Exception as e:
print(f"Error: {e}")
def calculate_level(xp):
return int(xp ** (1.0 / 3.0)) # 100k messages = lvl 100, good for super long term plan
@client.command()
async def level(ctx):
global xp_data
print(ctx.author.id)
print(ctx.author.mention)
if ctx.author.id == 811235357663297546:
if ctx.author.id in xp_data:
print(f"{ctx.author} is in xp_data")
xp = xp_data[ctx.author.id]
level = calculate_level(xp)
await ctx.send(f'You are at level {level} with {xp} total XP.')
# progress bar with ascii? could be nice, easy
else:
await ctx.send('You have not earned any XP yet.')
@client.hybrid_command(name="levelbot", with_app_command=True, description="check level")
@app_commands.guilds(MY_GUILD)
async def levelbot(ctx):
try:
await ctx.send(f'test')
except Exception as e:
print(f"Error: {e}")
def run_bot():
client.run(DISCORD_TOKEN)
threading.Thread(target=run_bot).start()
"""This allows us to run the Discord bot in a Python thread"""
with gr.Blocks() as demo:
gr.Markdown("""
# Huggingbots Server
This space hosts the huggingbots discord bot.
Currently supported models are Falcon and DeepfloydIF
""")
demo.queue(concurrency_count=100)
demo.queue(max_size=100)
demo.launch()