tux.handlers.activity
¶
Classes:
Name | Description |
---|---|
ActivityHandler | |
Functions:
Name | Description |
---|---|
setup | Adds the cog to the bot. |
Classes¶
ActivityHandler(bot: Tux, delay: int = 30)
¶
Bases: Cog
Methods:
Name | Description |
---|---|
build_activity_list | Parses Config.ACTIVITIES as JSON and returns a list of activity objects |
run | Loops through activities and updates bot presence periodically. |
Source code in tux/handlers/activity.py
Functions¶
build_activity_list() -> list[discord.Activity | discord.Streaming]
staticmethod
¶
Parses Config.ACTIVITIES as JSON and returns a list of activity objects
Returns:
Type | Description |
---|---|
list[Activity | Streaming] | A list of activity objects. |
Source code in tux/handlers/activity.py
Python
@staticmethod
def build_activity_list() -> list[discord.Activity | discord.Streaming]:
"""
Parses Config.ACTIVITIES as JSON and returns a list of activity objects
Returns
-------
list[discord.Activity | discord.Streaming]
A list of activity objects.
"""
if not Config.ACTIVITIES or not Config.ACTIVITIES.strip():
logger.warning("Config.ACTIVITIES is empty or None. Returning an empty list.")
return []
try:
activity_data = json.loads(Config.ACTIVITIES) # Safely parse JSON
except json.JSONDecodeError:
logger.error(f"Failed to parse ACTIVITIES JSON: {Config.ACTIVITIES!r}")
raise # Re-raise after logging
activities: list[discord.Activity | discord.Streaming] = []
for data in activity_data:
activity_type_str = data.get("type", "").lower()
if activity_type_str == "streaming":
activities.append(discord.Streaming(name=str(data["name"]), url=str(data["url"])))
else:
# Map the string to the discord.ActivityType enum; default to "playing" if not found.
activity_type = ACTIVITY_TYPE_MAP.get(activity_type_str, discord.ActivityType.playing)
activities.append(discord.Activity(type=activity_type, name=data["name"]))
return activities
run() -> NoReturn
async
¶
Loops through activities and updates bot presence periodically.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
self | ActivityHandler | The ActivityHandler instance. | required |
Returns:
Type | Description |
---|---|
NoReturn | |
Source code in tux/handlers/activity.py
Python
async def run(self) -> NoReturn:
"""
Loops through activities and updates bot presence periodically.
Parameters
----------
self : ActivityHandler
The ActivityHandler instance.
Returns
-------
NoReturn
"""
while True:
for activity in self.activities:
try:
if activity.name is None:
logger.warning("Activity name is None, skipping this activity.")
continue
activity.name = await handle_substitution(self.bot, activity.name)
await self.bot.change_presence(activity=activity)
except Exception as e:
logger.error(f"Error updating activity: {e}")
# Continue the loop even if an error occurs
await asyncio.sleep(self.delay)