bruder-py/src/main.py

110 lines
3.9 KiB
Python
Raw Normal View History

2022-09-20 01:44:23 +02:00
import os
2022-09-24 22:34:00 +02:00
import sys
import signal
2022-09-20 01:44:23 +02:00
import interactions
from database import Database
2022-09-20 01:44:23 +02:00
from dotenv import load_dotenv
from steamid import SteamID
2022-10-01 09:50:28 +02:00
from loguru import logger
2022-09-20 01:44:23 +02:00
class GracefulDeath:
"""Catch signals to allow graceful shutdown."""
2022-10-01 09:50:28 +02:00
def __init__(self):
self.receivedSignal=self.receivedSignalTermSignal=False
catchSignals = [
1,
2,
3,
10,
12,
15,
2022-10-01 09:50:28 +02:00
]
for signum in catchSignals:
signal.signal(signum, self.handler)
def handler(self, signum):
self.lastSignal=signum
self.receivedSignal=True
if signum in [2, 3, 15]:
self.receivedSignalTermSignal=True
2022-09-24 22:34:00 +02:00
def main(args):
sighandler = GracefulDeath()
2022-09-20 13:49:23 +02:00
load_dotenv()
token = os.getenv('DISCORD_TOKEN')
host = os.getenv('MYSQL_HOST')
user = os.getenv('MYSQL_USER')
password = os.getenv('MYSQL_PASSWORD')
db = os.getenv('MYSQL_DATABASE')
bot = interactions.Client(token=token)
con = Database(host, user, password, db)
2022-09-24 22:37:54 +02:00
try:
if args[0] == "init_database":
con.init_test_database()
2022-10-01 09:50:28 +02:00
logger.info(f"First init of database... Please disable this afterwards with the flag init_dabase")
2022-09-24 22:37:54 +02:00
except:
2022-10-01 09:50:28 +02:00
logger.info(f"Skipping database init...")
2022-09-24 22:37:54 +02:00
pass
2022-09-20 13:49:23 +02:00
@bot.command(
name="reserve_slot",
description="Claim your reserved slot on the DM Server",
scope=433600034983116810,
options=[
interactions.Option(
name="steamid",
description="Please provide your SteamID, from https://steamid.xyz/",
type=interactions.OptionType.STRING,
required=True,
),
],
)
async def reserve_slot(ctx: interactions.CommandContext, steamid: str):
channel = ctx.channel.id
user = ctx.user
if channel != "433738529898627073" and channel != "441985560144379912":
await ctx.send(f"This command only works in the Channel <#433738529898627073>!", ephemeral=True)
2022-10-01 09:50:28 +02:00
logger.debug(f"Command was used in the wrong channel. ({channel})")
return
try:
steam_id = SteamID(steamid)
except:
await ctx.send(f"You failed to give a valid SteamID as it seems, please head to <https://steamid.xyz/> and check.", ephemeral=True)
2022-10-01 17:34:02 +02:00
logger.debug(f"User {user.username} ({user.id}) has give a invalid SteamID. Could not convert! {steamid}")
return
if steam_id.isValid() == False:
await ctx.send(f"You failed to give a valid SteamID as it seems, please head to <https://steamid.xyz/> and check.", ephemeral=True)
2022-10-01 17:34:02 +02:00
logger.debug(f"User {user.username} ({user.id}) has given a invalid SteamID! Value: {steamid}")
return
try:
con.create_reserved_slot(user, steam_id.steam2(1))
await ctx.send(f"You just claimed a reserved slot for: `{steam_id.steam2(1)}`!")
2022-10-01 09:55:15 +02:00
logger.debug(f"{user.id} with SteamID: {steam_id.steam2(1)} has just claimed a reserved slot.")
except Exception as err:
if str(err) != "Duplicate entrys":
await ctx.send(f"Something failed with the database, please try again later.")
logger.warning(f"Error while trying to access database. {err}")
return
await ctx.send(f"You have already claimed a reserved slot!", ephemeral=True)
2022-10-01 17:34:02 +02:00
logger.debug(f"{steam_id.steam2(1)} or User {user.username} ({user.id}) is already in the database.")
2022-09-20 13:49:23 +02:00
bot.start()
while True:
2022-10-01 09:50:28 +02:00
logger.info("Trying graceful shutdown...")
if sighandler.receivedSignal:
bot.remove("reserve_slot", remove_commands=True)
exit()
2022-09-20 13:49:23 +02:00
if __name__ == '__main__':
2022-09-24 22:34:00 +02:00
main(sys.argv[1:])