import asyncio import os import threading from threading import Event from typing import Optional import discord import gradio as gr import gradio_client as grc from discord import Permissions from discord.ext import commands from discord.utils import oauth_url from gradio_client.utils import QueueError event = Event() DISCORD_TOKEN = os.getenv("DISCORD_TOKEN") HF_TOKEN = os.getenv("HF_TOKEN") async def wait(job): while not job.done(): await asyncio.sleep(0.2) def get_client(session: Optional[str] = None) -> grc.Client: client = grc.Client("https://wop-xxx-opengpt.hf.space/", hf_token=HF_TOKEN) if session: client.session_hash = session return client def truncate_response(response: str) -> str: ending = "...\nTruncating response to 2000 characters due to discord api limits." if len(response) > 2000: return response[: 2000 - len(ending)] + ending else: return response intents = discord.Intents.default() intents.message_content = True bot = commands.Bot(command_prefix="$", intents=intents) @bot.event async def on_ready(): print(f"Logged in as {bot.user} (ID: {bot.user.id})") event.set() print("------") @bot.event async def on_member_join(member): await member.send('Private message') # running in thread def run_bot(): if not DISCORD_TOKEN: print("DISCORD_TOKEN NOT SET") event.set() else: bot.run(DISCORD_TOKEN) threading.Thread(target=run_bot).start() event.wait() if not DISCORD_TOKEN: welcome_message = """ ## You have not specified a DISCORD_TOKEN, which means you have not created a bot account. Please follow these steps: ### 1. Go to https://discord.com/developers/applications and click 'New Application' ### 2. Give your bot a name 🤖 ![](https://gradio-builds.s3.amazonaws.com/demo-files/discordbots/BotName.png) ## 3. In Settings > Bot, click the 'Reset Token' button to get a new token. Write it down and keep it safe 🔐 ![](https://gradio-builds.s3.amazonaws.com/demo-files/discordbots/ResetToken.png) ## 4. Optionally make the bot public if you want anyone to be able to add it to their servers ## 5. Scroll down and enable 'Message Content Intent' under 'Priviledged Gateway Intents' ![](https://gradio-builds.s3.amazonaws.com/demo-files/discordbots/MessageContentIntent.png) ## 6. Save your changes! ## 7. The token from step 3 is the DISCORD_TOKEN. Rerun the deploy_discord command, e.g client.deploy_discord(discord_bot_token=DISCORD_TOKEN, ...), or add the token as a space secret manually. """ else: permissions = Permissions(326417525824) url = oauth_url(bot.user.id, permissions=permissions) welcome_message = f""" ## Add this bot to your server by clicking this link: {url} ## How to use it? The bot can be triggered via `/chat` followed by your text prompt. This will create a thread with the bot's response to your text prompt. You can reply in the thread (without `/chat`) to continue the conversation. In the thread, the bot will only reply to the original author of the command. ⚠️ Note ⚠️: Please make sure this bot's command does have the same name as another command in your server. ⚠️ Note ⚠️: Bot commands do not work in DMs with the bot as of now. """ with gr.Blocks() as demo: gr.Markdown( f""" # Discord bot of https://aliabid94-chattest.hf.space {welcome_message} """ ) demo.launch()