File size: 3,460 Bytes
a5603d3
7187a61
 
a5603d3
0aa83ad
ee7844e
 
 
7187a61
 
 
a5603d3
 
7187a61
 
a5603d3
 
6c5f294
 
 
 
 
 
 
 
 
 
 
 
 
 
0aa83ad
 
ee7844e
 
 
0aa83ad
 
6c5f294
 
 
 
 
 
7187a61
6c5f294
 
 
8010cdb
6c5f294
8010cdb
6c5f294
 
 
 
 
7187a61
79a1edd
 
6c5f294
 
 
 
 
 
 
 
 
 
79a1edd
 
6c5f294
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79a1edd
 
6c5f294
 
 
 
 
 
 
 
 
3b06990
 
6c5f294
 
 
 
 
 
 
 
 
 
 
3b06990
 
6c5f294
3b06990
79a1edd
7187a61
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import discord
import os
import threading
from discord.ext import commands
import json
import time
import matplotlib.pyplot as plt
from io import BytesIO
import gradio_client
import gradio as gr
from gradio_client import Client


DISCORD_TOKEN = os.environ.get("DISCORD_TOKEN", None)
intents = discord.Intents.all() 
bot = commands.Bot(command_prefix='!', intents=intents)

XP_PER_MESSAGE = 10


def load_xp_data():
    try:
        with open('xp_data.json', 'r') as f:
            return json.load(f)
    except FileNotFoundError:
        return {}


def save_xp_data(xp_data):
    with open('xp_data.json', 'w') as f:
        json.dump(xp_data, f)


@bot.event
async def on_ready():
    print(f'Logged in as {bot.user.name}')


@bot.event
async def on_message(message):
    if message.author.bot:
        return

    author_id = str(message.author.id)
    
    xp_data.setdefault(author_id, [])
    timestamp = int(time.time())
    xp_data[author_id].append((timestamp, XP_PER_MESSAGE))
    
    save_xp_data(xp_data)
    
    await bot.process_commands(message)


def calculate_level(xp):
    return int(xp ** (1.0 / 3.0)) # 100k messages = lvl 100, good for super long term plan


@bot.command()
async def level(ctx):
    if ctx.author.id == 811235357663297546: # lunarflu
        author_id = str(ctx.author.id)
        if author_id in xp_data:
            total_xp = sum(xp for _, xp in xp_data[author_id])
            level = calculate_level(total_xp)
            await ctx.send(f'You are at level {level} with {total_xp} total XP.')
            # progress bar with ascii? could be nice, easy
        else:
            await ctx.send('You have not earned any XP yet.')


@bot.command()
async def plot_xp(ctx):
    if ctx.author.id == 811235357663297546:
        author_id = str(ctx.author.id)
        if author_id in xp_data:
            timestamps, xp_values = zip(*xp_data[author_id])
            plt.plot(timestamps, xp_values)
            plt.xlabel('Timestamp')
            plt.ylabel('XP')
            plt.title('XP Over Time')
            
            image_stream = BytesIO()
            plt.savefig(image_stream, format='png')
            plt.close()
            
            image_stream.seek(0)
            await ctx.send(file=discord.File(fp=image_stream, filename='xp_graph.png'))
        else:
            await ctx.send('You have not earned any XP yet.')


@bot.command()
async def show_xp_data(ctx):
    if ctx.author.id == 811235357663297546:
        author_id = str(ctx.author.id)
        if author_id in xp_data:
            xp = xp_data[author_id]
            await ctx.send(f'Your XP data: {xp}')
        else:
            await ctx.send('You have not earned any XP yet.')


@bot.command()
async def load_xp(ctx):
    if ctx.author.id == 811235357663297546:
        try:
            xp_data.clear()  # Clear current XP data
            with open('xp_data.json', 'r') as f:
                loaded_data = json.load(f)
                xp_data.update(loaded_data)  # Update with loaded data
            await ctx.send('XP data has been loaded from the file.')
        except FileNotFoundError:
            await ctx.send('No XP data file found.')


    


        
""""""
DISCORD_TOKEN = os.environ.get("DISCORD_TOKEN", None)
def run_bot():
    bot.run(DISCORD_TOKEN)
threading.Thread(target=run_bot).start()
def greet(name):
    return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()