File size: 4,609 Bytes
434f798
30462e3
1f188d9
 
 
b0918e1
1f188d9
8dd1108
1f188d9
 
 
 
f6602f2
1f188d9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ad9d692
1f188d9
cbe51b9
1f188d9
 
 
cbe51b9
1f188d9
def7a78
c6565e2
b7eca85
773ec73
 
78dea1a
b7eca85
09d6ac2
2a906f6
b80bf81
d3ba82c
78dea1a
 
773ec73
61513be
2a906f6
a56363d
c6565e2
ae4f533
 
 
2a906f6
5e34c0f
 
 
 
 
 
 
 
 
 
 
 
30462e3
5e34c0f
 
0c6f218
5e34c0f
 
 
0c6f218
5e34c0f
 
ae4f533
 
 
 
 
 
f0f2029
ae4f533
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c6f218
ae4f533
0c6f218
ae4f533
 
 
0c6f218
ae4f533
 
 
0c6f218
ae4f533
 
 
 
0c6f218
c6565e2
ae4f533
d4ce55b
c6565e2
 
 
db21dc3
 
 
b3ba3b3
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
130
import os
import io
import re
import csv
import json
import time
import random
import asyncio
import discord
import logging
import os.path
import secrets
import aiohttp
import gspread
import datetime
import requests
import threading
import gradio_client

import numpy as np
import pandas as pd
import gradio as gr
import plotly.graph_objects as go

from tabulate import tabulate
from requests import HTTPError
from gradio_client import Client
from discord import Color, Embed
from discord.ui import Button, View
from discord.ext import commands, tasks
from datetime import datetime, timedelta
from urllib.parse import urlparse, parse_qs
from apscheduler.executors.pool import ThreadPoolExecutor
from apscheduler.executors.asyncio import AsyncIOExecutor
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from gspread_formatting.dataframe import format_with_dataframe
from apscheduler.schedulers.background import BackgroundScheduler
from gspread_dataframe import get_as_dataframe, set_with_dataframe
from huggingface_hub import HfApi, list_liked_repos, list_models


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





@bot.event
async def on_ready():
    """import data from google sheets -> HF Space df (doesn't make API call this way, as it's read-only)""" 
    print(f"We have logged in as {bot.user}")
    await give_verified_roles()


async def give_verified_roles():
    while True:
        try:
            global_df = pd.DataFrame()

            async with aiohttp.ClientSession() as session:
                try:
                    async with session.get(
                        "https://docs.google.com/spreadsheets/d/1C8aLqgCqLYcMiIFf-P_Aosaa03C_WLIB_UyqvjSdWg8/export?format=csv&gid=0",
                        timeout=10
                    ) as response:
                        if response.status != 200:
                            print(f"Failed to fetch CSV: HTTP {response.status}")
                            await asyncio.sleep(60)
                            continue
                        csv_data = await response.text()
                        global_df = pd.read_csv(io.StringIO(csv_data))
                except asyncio.TimeoutError:
                    print("CSV fetch timed out.")
                    await asyncio.sleep(60)
                    continue
                except Exception as e:
                    print(f"Error fetching CSV: {e}")
                    await asyncio.sleep(60)
                    continue
 
            guild = bot.get_guild(879548962464493619)
            role = guild.get_role(900063512829755413)
    
            # Define the invite message
            org_link = "https://huggingface.co/organizations/discord-community/share/wPKRAHYbAlaEaCxUxcqVyaaaeZcYagDvqc"
            invite_message = "Click to join our community org on the HF Hub!"

    
            # Cache members in the guild
            await guild.chunk()
    
            # Iterate over the dataframe rows
            for index, row in global_df.iterrows():
                # Extract Hugging Face username
                hf_user_name = row['hf_user_name']
                if pd.notna(hf_user_name) and hf_user_name.lower() != 'n/a':
                    discord_id = row['discord_user_id'].strip('L')
                    member = guild.get_member(int(discord_id))
                    if not member:
                        continue
                    if role not in member.roles:
                        await member.add_roles(role)
                        await asyncio.sleep(10)
                        print(f"Role added to member: {member}")
                        await asyncio.sleep(10)
                        lunar = bot.get_user(811235357663297546)
                        if lunar:
                            await lunar.send(f"Verified role given to {member}!") 
                            await asyncio.sleep(10)
                        await member.send(
                            f"Verification successful! [{member} <---> {row['discord_user_name']}] \n🤗 {org_link} {invite_message}"
                        )
                        await asyncio.sleep(10)
    
        except Exception as e:
            print(f"Error encountered: {e}")

        await asyncio.sleep(60)

        
# runs discord bot in thread = helps avoid blocking calls
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()