game-discord-bot/app.py

103 lines
3.6 KiB
Python
Raw Normal View History

2024-01-01 15:08:48 +01:00
#!/usr/bin/env python3
2024-01-01 15:41:24 +01:00
from config import config
2024-01-01 13:10:24 +01:00
from lib import *
2023-12-31 14:56:45 +01:00
import discord
2024-01-01 13:10:24 +01:00
import logging
2024-01-01 15:41:24 +01:00
logger = logging.getLogger('discord.gamebot')
logger.setLevel(logging.INFO)
2023-12-31 14:56:45 +01:00
2024-01-01 15:41:24 +01:00
intents = discord.Intents(messages=True, message_content=True)
2024-01-01 13:10:24 +01:00
client = discord.Client(intents=intents)
2024-01-01 15:41:24 +01:00
2023-12-31 14:56:45 +01:00
@client.event
async def on_ready():
2024-01-01 15:41:24 +01:00
logger.info(f'Logged in as {client.user}')
2023-12-31 14:56:45 +01:00
@client.event
async def on_message(message):
2024-01-01 15:41:24 +01:00
# Only allow chats in DM or whitelisted channels
# TODO: FIX
if not (isinstance(message.channel, discord.channel.DMChannel)) and not (message.channel.id in config['bot']['channels']):
print(isinstance(message.channel, discord.channel.DMChannel))
print(message.channel.id)
return
# print(message.channel.name)
2024-01-01 13:10:24 +01:00
# Handle own messages
if message.author == client.user:
return
# Handle whitelist
if message.author.name not in config['bot']['whitelist']:
2024-01-01 15:41:24 +01:00
logger.error(
f"Unauthorized command by {message.author.name}. message: \"{message.content}\"")
2024-01-01 13:10:24 +01:00
await message.channel.send(f"Sorry {message.author.mention}, you are not authorized to do that.")
return
2024-01-01 15:41:24 +01:00
2024-01-01 13:10:24 +01:00
if message.content == f"{client.user.mention} ping":
2024-01-01 15:41:24 +01:00
logger.info(f"Ping by {message.author.name}")
await message.channel.send(f"{message.author.mention} 👋")
2024-01-01 13:10:24 +01:00
return
2024-01-01 15:08:48 +01:00
2024-01-01 15:41:24 +01:00
# if message.content == f"{client.user.mention} version":
# logger.info(f"Version by {message.author.name}")
# await message.channel.send(f"{message.author.mention} ")
2024-01-01 15:08:48 +01:00
# return
2024-01-01 15:41:24 +01:00
2024-01-01 13:10:24 +01:00
# Handle @Bot mention
messagearray = message.content.split()
if messagearray[0] == client.user.mention:
messagearray.pop(0)
2024-01-01 15:08:48 +01:00
else:
return
2024-01-01 13:10:24 +01:00
if messagearray[0] == "help":
2024-01-01 15:41:24 +01:00
logger.info(f"Help by {message.author.name}")
await message.channel.send(BuildHelpList())
2024-01-01 13:10:24 +01:00
return
2024-01-01 15:08:48 +01:00
if messagearray[0] in ["list", "info"]:
2024-01-01 15:41:24 +01:00
logger.info(f"{messagearray[0]} by {message.author.name}")
2024-01-01 13:10:24 +01:00
await message.channel.send(BuildGameList())
return
2024-01-01 15:41:24 +01:00
2024-01-01 13:10:24 +01:00
if messagearray[0] in ["start", "stop", "restart"] and len(messagearray) >= 2:
2024-01-01 15:08:48 +01:00
game = GetGameByGameSlug(messagearray[1])
if not game:
2024-01-01 15:41:24 +01:00
logger.error(
f"{messagearray[0]} for invalid Game \"{messagearray[1]}\" by {message.author.name}")
2024-01-01 15:08:48 +01:00
await message.add_reaction("")
await message.channel.send(f"Invalid game: {messagearray[1]}")
return
2024-01-01 15:41:24 +01:00
logger.info(
f"{messagearray[0]} by {message.author.name}, Game: {messagearray[1]}")
2024-01-01 15:08:48 +01:00
success = HandleSystemdService(game, messagearray[0])
2024-01-01 15:41:24 +01:00
2024-01-01 13:10:24 +01:00
# :white_check_mark: :x:
if success:
2024-01-01 15:41:24 +01:00
logger.info(
f"{messagearray[0]} by {message.author.name}, Game: {messagearray[1]} was SUCESSFUL")
2024-01-01 13:10:24 +01:00
await message.add_reaction("")
else:
2024-01-01 15:41:24 +01:00
logger.error(
f"{messagearray[0]} by {message.author.name}, Game: {messagearray[1]} FAILED!")
2024-01-01 13:10:24 +01:00
await message.add_reaction("")
await message.channel.send(f"Sorry {message.author.mention}, that didn't work. Ping @lauralani")
if messagearray[0] == "status":
2024-01-01 15:12:32 +01:00
status = BuildSingleGameStatus(messagearray[1])
if not status:
2024-01-01 15:41:24 +01:00
logger.error(
f"Status for invalid Game {messagearray[1]} by {message.author.name}")
2024-01-01 15:12:32 +01:00
await message.add_reaction("")
await message.channel.send(f"Invalid game: {messagearray[1]}")
return
2024-01-01 15:41:24 +01:00
logger.info(
f"Status for Game {messagearray[1]} by {message.author.name}")
2024-01-01 15:12:32 +01:00
await message.channel.send(status)
2024-01-01 13:10:24 +01:00
return
2024-01-01 15:41:24 +01:00
client.run(config['bot']['token'])