Spaces:
Paused
Paused
| import os | |
| import io | |
| import re | |
| import csv | |
| import sys | |
| import json | |
| import time | |
| import random | |
| import asyncio | |
| import discord | |
| import logging | |
| import aiohttp | |
| import gspread | |
| import datetime | |
| import requests | |
| import threading | |
| import schedule | |
| 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.schedulers.asyncio import AsyncIOScheduler | |
| from gspread_formatting.dataframe import format_with_dataframe | |
| 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) | |
| scheduler = AsyncIOScheduler() | |
| def restart_bot(): | |
| print("Restarting bot...") | |
| os.execv(sys.executable, ['python'] + sys.argv) | |
| def periodic_restart(): | |
| print("Scheduled restart triggered...") | |
| restart_bot() | |
| async def on_ready(): | |
| """Import data from Google Sheets -> HF Space df""" | |
| print(f"We have logged in as {bot.user}") | |
| scheduler.start() | |
| 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(30) | |
| 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(30) | |
| continue | |
| except Exception as e: | |
| print(f"Error fetching CSV: {e}") | |
| await asyncio.sleep(30) | |
| continue | |
| 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) | |
| await asyncio.sleep(20) | |
| timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') | |
| print(f"[{timestamp}] Role added to member: {member}") | |
| await asyncio.sleep(20) | |
| lunar = bot.get_user(811235357663297546) | |
| if lunar: | |
| await lunar.send(f"Verified role given to {member}!") | |
| await asyncio.sleep(20) | |
| await member.send( | |
| f"Verification successful! [{member} <---> {row['discord_user_name']}] \n🤗 {org_link} {invite_message}" | |
| ) | |
| await asyncio.sleep(30) # 2 per min = maybe avoid more limits | |
| except Exception as e: | |
| print(f"Error encountered: {e}") | |
| await asyncio.sleep(30) # 10 | |
| 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() |