import os import discord from discord.ext import commands from discord_slash import SlashCommand, SlashContext import datetime import requests import asyncio import threading from threading import Event event = Event() DISCORD_TOKEN = os.getenv("DISCORD_TOKEN") HF_TOKEN = os.getenv("HF_TOKEN") intents = discord.Intents.all() bot = commands.Bot(command_prefix="$", intents=intents) slash = SlashCommand(bot, sync_commands=True) async def wait(job): while not job.done(): await asyncio.sleep(0.2) 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 @slash.slash( name="uptime", description="Displays the uptime of the bot." ) async def uptime(ctx: SlashContext): """Displays the uptime of the bot.""" delta = datetime.datetime.utcnow() - bot.start_time hours, remainder = divmod(int(delta.total_seconds()), 3600) minutes, seconds = divmod(remainder, 60) days, hours = divmod(hours, 24) embed = discord.Embed(title="Bot Uptime", color=discord.Color.green()) embed.add_field(name="Uptime", value=f"{days} days, {hours} hours, {minutes} minutes, {seconds} seconds", inline=False) embed.set_footer(text="Created by Cosmos") await ctx.send(embed=embed) @slash.slash( name="verse", description="Returns a random Bible verse." ) async def verse(ctx: SlashContext): """Returns a random Bible verse.""" bible_api_url = "https://labs.bible.org/api/?passage=random&type=json" response = requests.get(bible_api_url) if response.status_code == 200: verse = response.json()[0] passage = f"**{verse['bookname']} {verse['chapter']}:{verse['verse']}** - \n{verse['text']}" else: passage = "Unable to fetch Bible verse" embed = discord.Embed(title="Random Bible Verse", description=passage, color=discord.Color.blue()) embed.set_footer(text="Created by Cosmos") await ctx.send(embed=embed) @slash.slash( name="cmds", description="Returns a list of commands and bot information." ) async def cmds(ctx: SlashContext): """Returns a list of commands and bot information.""" command_list = [f"{command.name}: {command.help}" for command in bot.commands] bot_info = f"Bot Name: {bot.user.name}\nBot ID: {bot.user.id}" embed = discord.Embed(title="Bot prefix: $", color=discord.Color.blue()) embed.add_field(name="Commands", value="\n".join(command_list), inline=False) embed.add_field(name="Bot Information", value=bot_info, inline=False) embed.set_footer(text="Created by Cosmos") await ctx.send(embed=embed) async def update_status(): await bot.wait_until_ready() while True: member_count = sum(guild.member_count for guild in bot.guilds) await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=f"{member_count} users")) await asyncio.sleep(60) @bot.event async def on_ready(): bot.start_time = datetime.datetime.utcnow() print(f"Logged in as {bot.user} (ID: {bot.user.id})") event.set() print("------") bot.loop.create_task(update_status()) @bot.event async def on_member_join(member): channel = discord.utils.get(member.guild.channels, name="đź‘‹wellcome-goodbye") bible_api_url = "https://labs.bible.org/api/?passage=random&type=json" response = requests.get(bible_api_url) if response.status_code == 200: verse = response.json()[0] passage = f"{verse['bookname']} {verse['chapter']}:{verse['verse']} - {verse['text']}" else: passage = "Unable to fetch Bible verse" embed = discord.Embed(title=f"Welcome to the server, {member.name}!", description=f"Hope you have a great stay here, <@{member.id}>!", color=discord.Color.blue()) embed.add_field(name="Random Bible Verse", value=passage, inline=False) embed.set_footer(text="Created by Cosmos") await channel.send(embed=embed) 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() with gr.Blocks() as demo: gr.Markdown( f""" # Discord bot is online! """ ) demo.launch()