lunarflu's picture
lunarflu HF staff
longer sleeps
0c6f218 verified
raw
history blame
4.61 kB
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()