discord_bot.py documentation

This commit is contained in:
Thomas Rubini 2023-01-13 09:44:57 +01:00
parent a8fae6b3fc
commit cfee9fa428
No known key found for this signature in database
GPG Key ID: C7D287C8C1CAC373

View File

@ -3,10 +3,14 @@ import threading
import truthseeker
import asyncio
async def empty_coro():
return
class DiscordBot:
"""
Wrapper around a discord bot, providing utility methods to interact with it
:attr Client bot: the underlying discord bot from discord.py
:attr TextChannel __channel__: the channel used by the bot to send messages
"""
def __init__(self):
self.bot = discord.Client(intents=discord.Intents.default())
self.__channel__ = None
@ -19,7 +23,10 @@ class DiscordBot:
self.__setup__channel__()
self.update_games_presence()
def __setup__channel__(self):
def __setup__channel__(self) -> None:
"""
Setup the channel that the bot will send message in
"""
if len(self.bot.guilds) == 1:
self.__channel__ = discord.utils.get(self.bot.guilds[0].channels, name="bot")
else:
@ -31,6 +38,9 @@ class DiscordBot:
return thr
def API(func):
"""
Decorator used to wrap APIs methods, to handle thread context change, and ready check
"""
def decorator(self, *args, **kwargs):
if self.bot and self.bot.is_ready():
self.event_loop.create_task(func(self, *args, **kwargs))
@ -39,7 +49,10 @@ class DiscordBot:
return decorator
@API
async def update_games_presence(self):
async def update_games_presence(self) -> None:
"""
Update the bot's status using the app's current context
"""
games_n = len(truthseeker.APP.games_list)
activity_name = f"Handling {games_n} game{'' if games_n==1 else 's'} !"
activity = discord.Activity(name=activity_name, type=discord.ActivityType.watching)
@ -47,7 +60,10 @@ class DiscordBot:
@API
async def send_message(self, text):
"""
Send a message to the channel used by the bot
"""
if self.__channel__:
await self.__channel__.send(text)
else:
print("channel member not defined, not sending discord message")
print("channel not defined, not sending discord message")