import discord import threading import os import gradio as gr import time from discord.ext import commands from slack_sdk import WebClient from slack_sdk.errors import SlackApiError import aiojobs import asyncio import re from datetime import datetime, timedelta from apscheduler.executors.pool import ThreadPoolExecutor from apscheduler.schedulers.background import BackgroundScheduler DISCORD_TOKEN = os.environ.get("DISCORD_TOKEN", None) intents = discord.Intents.all() bot = commands.Bot(command_prefix='!', intents=intents) global_df = pd.DataFrame() test_merge = pd.read_csv("https://docs.google.com/spreadsheets/d/1C8aLqgCqLYcMiIFf-P_Aosaa03C_WLIB_UyqvjSdWg8/export?format=csv&gid=0") @bot.event async def on_ready(): global global_df """import data from google sheets -> HF Space df (doesn't make API call this way, as it's read-only)""" global_df = test_merge print(f"csv successfully retrieved: \n {global_df}") @tasks.loop(seconds=10) async def give_verified_roles(): try: global global_df guild = bot.get_guild(879548962464493619) role = guild.get_role(900063512829755413) org_link = "https://huggingface.co/organizations/discord-community/share/wPKRAHYbAlaEaCxUxcqVyaaaeZcYagDvqc" invite_message = "Click to join our community org on the HF Hub!" await guild.chunk() for index, row in global_df.iterrows(): 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) lunar = bot.get_user(811235357663297546) await lunar.send(f"Verified role given to {member}!") await member.send(f"Verification successful! [{member} <---> {row['discord_user_name']}] \n🤗 {org_link} {invite_message}") except Exception as e: print(f"Error: {e}") # 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()