wop's picture
Update app.py
ab725eb verified
raw
history blame
4.42 kB
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()