dragon-bot/app/bot.py

137 lines
4.1 KiB
Python
Executable File

#!/usr/local/bin/python
from discord.ext import commands
import core_utils
import discord
import os
intents = discord.Intents.default()
intents.message_content = True
intents.members = True
intents.reactions = True
bot = commands.Bot(command_prefix="!", intents=intents)
bot.remove_command("help")
cogfiles = [
f"cogs.{filename[:-3]}"
for filename in os.listdir("/app/cogs/")
if filename.endswith(".py")
]
for cogfile in cogfiles:
bot.load_extension(cogfile)
@bot.event
async def on_ready():
print(f"{bot.user.name} has connected to Discord!")
if os.getenv("DRAGON_ENV") == "prod":
# await bot.get_channel(152921472304676865).send("I have reconnected")
# Waiting-room in zoid's server
channel_id = 1026281775984549958
message_id = 1099374735428681758
# for testing, bot-testing server's channel
# channel_id = 932476007439552522
# message_id = 1099841144218722324
blurb = """Welcome to our server!
We have lots of roles you can select based on what kind of games you're here to play.
Please react to this message with one of the following emojis to be granted the appropriate role:
🚀 for Star Citizen
🔫 for Tarkov
👹 for Darktide or Vermintide
🪖 for Battlefield
"""
# message = await bot.get_channel(channel_id).send(blurb)
# Update the message on_ready to match the content we always want to be there
message = await bot.get_channel(channel_id).fetch_message(message_id)
await message.edit(content=blurb)
@bot.event
async def on_raw_reaction_add(payload):
if payload.guild_id not in core_utils.my_guilds:
return # Reaction is not in my discord
guild = bot.get_guild(payload.guild_id)
role_map = {
"🔫": "Tarkov Gamers",
"👹": "Dorktide Gamers",
"🪖": "Battlefielders",
"🚀": "Star Citizens",
}
role = discord.utils.get(guild.roles, name=role_map[payload.emoji.name])
member = guild.get_member(payload.user_id)
if payload.channel_id == 1026281775984549958:
await member.add_roles(role)
@bot.listen("on_message")
async def fix_cdn_url(ctx):
# Ignore images
videos = ["mp4", "mov"]
if any(x in ctx.content for x in videos) and "media.discordapp.net" in ctx.content:
await ctx.delete()
await ctx.channel.send(
"%s said:\n\n%s"
% (
ctx.author.mention,
ctx.content.replace("media.discordapp.net", "cdn.discordapp.com"),
)
)
return
@bot.listen("on_message")
async def convert_heic_to_jpg(ctx):
from cmagick import cmagick
import time
import tempfile
if ctx.attachments:
for attachment in ctx.attachments:
if attachment.filename.lower().endswith(("heic", "tiff")):
source_file = "/tmp/source"
source_file, file_path = tempfile.mkstemp()
jpg_file = "/tmp/%s.jpg" % time.time()
await attachment.save(fp=file_path)
img = cmagick.convert(file_path, jpg_file)
try:
await ctx.delete()
except Exception:
pass
await ctx.channel.send(
"%s said:\n%s" % (ctx.author.mention, ctx.content),
file=discord.File(jpg_file),
)
os.remove(file_path)
return
@bot.event
async def on_command_completion(ctx):
channel = bot.get_channel(826547484632678453)
embed = discord.Embed(colour=discord.Color.green(), title="Command Executed")
embed.add_field(name="Command:", value=f"`{ctx.command}`")
embed.add_field(name="User:", value=f"`{ctx.author}`", inline=False)
embed.add_field(name="Channel:", value=f"{ctx.channel} **( <#{ctx.channel.id}> )**")
embed.add_field(
name="Link to Message:",
value="**(** [%s](%s) **)**" % (ctx.channel, ctx.message.jump_url),
)
embed.add_field(name="Server:", value=f"{ctx.guild} **( <#{ctx.channel.id}> )**")
if ctx.message.author.id != core_utils.my_id:
await channel.send(embed=embed)
bot.run(os.getenv("token"))