File size: 3,352 Bytes
cf1e692
7187a61
 
cf1e692
 
6d949e0
7187a61
 
 
a5603d3
7187a61
cf1e692
 
a5603d3
6c5f294
 
cf1e692
80a1e02
cf1e692
6c5f294
0aa83ad
6b5ae25
 
 
 
 
ebbf773
6d949e0
cf1e692
 
 
 
 
6d949e0
cf1e692
 
 
 
0aa83ad
 
cf1e692
6c5f294
6d949e0
cf1e692
 
 
 
6d949e0
cf1e692
80a1e02
cf1e692
3ad4cda
 
 
49abc96
3ad4cda
 
 
cf1e692
6d949e0
 
6c5f294
cf1e692
6b5ae25
 
7187a61
79a1edd
cf1e692
6c5f294
3c44710
 
 
 
 
 
 
 
b46ad23
c7ed7f7
cf1e692
8a13292
 
3c44710
 
 
 
 
 
 
 
 
b46ad23
 
3c44710
 
b46ad23
 
 
c7ed7f7
cf1e692
 
 
6d949e0
cf1e692
7187a61
cf1e692
 
 
 
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
import discord
import os
import threading
from discord.ext import commands
import json

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 # 100k messages = 1M exp = lvl 100
""""""


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


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

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


@bot.event
async def on_message(message):
    try:
        if message.author != bot.user:
            """AWAIT LEVEL ALGORITM OR SOMETHING (MULTIPLE FILES?)"""
            author_id = str(message.author.id) # dictionary pairs (ID -> TOTAL XP)
            xp_data.setdefault(author_id, 0) # default if it doesn't already exist
            
            xp_data[author_id] += XP_PER_MESSAGE
            print(f"xp_data: {xp_data}")
            save_xp_data()

            user = bot.get_user(811235357663297546)
            try:
                await user.send(f" {message.content} xp_data: {xp_data}")
            except discord.HTTPException:
                await ctx.send("Failed to send a DM.")            
            
            await bot.process_commands(message)
    except Exception as e:
        print(f"Error: {e}")

        
def calculate_level(xp):
    return int(xp ** (1.0 / 3.0))


@bot.command()
async def level(ctx):
    if ctx.author.id == 811235357663297546:
        author_id = str(ctx.author.id)
        if author_id in xp_data:
            xp = xp_data[author_id]
            level = calculate_level(xp)
            await ctx.send(f'You are at level {level} with {xp} XP.')
        else:
            await ctx.send('You have not earned any XP yet.')
            # show top users by level / exp

@bot.command()
async def count(ctx):
    """Count total messages per user in all channels."""
    if ctx.author.id == 811235357663297546:    
        message_counts = {}
    
        for channel in ctx.guild.text_channels:
            try:
                async for message in channel.history(limit=None):
                    message_counts[message.author] = message_counts.get(message.author, 0) + 1
            except discord.Forbidden:
                # Handle the Forbidden error
                #await ctx.send(f"Missing access to read messages in {channel.name}")
                print(f"Missing access to read messages in {channel.name}")
    
        sorted_users = sorted(message_counts.items(), key=lambda x: x[1], reverse=True)
        top_list = "\n".join([f"{member.name}: {count}" for member, count in sorted_users[:50]])
        #await ctx.send(f"Message count per user in all text channels:\n{top_list}")
        print(f"Message count per user in all text channels:\n{top_list}")

        
""""""
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()