From fd464535672da67094e3dfdeac5fc01e0afa6842 Mon Sep 17 00:00:00 2001 From: Choco <94597336+ChocoMeow@users.noreply.github.com> Date: Sun, 9 Apr 2023 20:28:26 +0800 Subject: [PATCH] Add bot activity configuration --- addons/__init__.py | 1 + addons/placeholders.py | 42 ++++++++++++++++++++++++++++++++++++++++++ addons/settings.py | 1 + cogs/task.py | 32 ++++++++++++++++++++++++++++++++ main.py | 18 ++++++++++-------- settings Example.json | 3 +++ 6 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 addons/placeholders.py diff --git a/addons/__init__.py b/addons/__init__.py index 6ffc10a..a19a379 100644 --- a/addons/__init__.py +++ b/addons/__init__.py @@ -1,2 +1,3 @@ from .lyrics import lyricsPlatform +from .placeholders import Placeholders from .settings import Settings, TOKENS \ No newline at end of file diff --git a/addons/placeholders.py b/addons/placeholders.py new file mode 100644 index 0000000..ecea4dd --- /dev/null +++ b/addons/placeholders.py @@ -0,0 +1,42 @@ +from discord.ext import commands +from re import findall +from importlib import import_module + +class Placeholders: + def __init__(self, bot: commands.Bot) -> None: + self.bot = bot + self.voicelink = import_module("voicelink") + self.placeholders = { + "guilds": self.guilds_count, + "users": self.users_count, + "players": self.players_count, + "nodes": self.nodes_count + } + + def guilds_count(self) -> int: + return len(self.bot.guilds) + + def users_count(self) -> int: + return len(self.bot.users) + + def players_count(self) -> int: + count = 0 + for node in self.voicelink.NodePool._nodes.values(): + count += len(node._players) + + return count + + def nodes_count(self): + return len(self.voicelink.NodePool._nodes) + + def replace(self, msg: str) -> str: + keys = findall(r'@@(.*?)@@', msg) + + for key in keys: + value = self.placeholders.get(key.lower(), None) + if value is None: + continue + + msg = msg.replace(f"@@{key}@@", str(value())) + + return msg \ No newline at end of file diff --git a/addons/settings.py b/addons/settings.py index 56cd0ff..f0f0bc3 100644 --- a/addons/settings.py +++ b/addons/settings.py @@ -7,6 +7,7 @@ class Settings: self.nodes = settings.get("nodes", {}) self.max_queue = settings.get("default_max_queue", 1000) self.bot_prefix = settings.get("prefix", "") + self.activity = settings.get("activity", [{"listen": "/help"}]) self.embed_color = int(settings.get("embed_color", "0xb3b3b3"), 16) self.bot_access_user = settings.get("bot_access_user", []) self.emoji_source_raw = settings.get("emoji_source_raw", {}) diff --git a/cogs/task.py b/cogs/task.py index ae5f504..988258f 100644 --- a/cogs/task.py +++ b/cogs/task.py @@ -1,19 +1,51 @@ import voicelink +import discord import function as func from discord.ext import commands, tasks from datetime import datetime +from addons import Placeholders class Task(commands.Cog): def __init__(self, bot: commands.Bot): self.bot = bot + self.activity_update.start() self.player_check.start() self.cache_cleaner.start() + self.act_type = { + "play": discord.ActivityType.playing, + "listen": discord.ActivityType.listening, + "watch": discord.ActivityType.watching, + "stream": discord.ActivityType.streaming + } + self.current_act = 0 + self.placeholder = Placeholders(bot) + def cog_unload(self): + self.activity_update.cancel() self.player_check.cancel() self.cache_cleaner.cancel() + @tasks.loop(minutes=10.0) + async def activity_update(self): + await self.bot.wait_until_ready() + + try: + act_data = func.settings.activity[(self.current_act + 1) % len(func.settings.activity) - 1] + + act_original = self.bot.activity + act_type = self.act_type.get(list(act_data.keys())[0].lower(), discord.ActivityType.playing) + act_name = self.placeholder.replace(list(act_data.values())[0]) + + if act_original.type != act_type or act_original.name != act_name: + new_act = discord.Activity(type=act_type, name=act_name) + await self.bot.change_presence(activity=new_act) + self.current_act = (self.current_act + 1) % len(func.settings.activity) + + except: + pass + @tasks.loop(minutes=5.0) async def player_check(self): if not self.bot.voice_clients: diff --git a/main.py b/main.py index 4f2f215..eb2863e 100644 --- a/main.py +++ b/main.py @@ -119,14 +119,16 @@ member_cache = discord.MemberCacheFlags( joined=False ) -bot = Vocard(command_prefix=get_prefix, - help_command=None, - tree_cls=CommandCheck, - chunk_guilds_at_startup=False, - member_cache_flags=member_cache, - activity=discord.Activity(type=discord.ActivityType.listening, name="/help"), - case_insensitive=True, - intents=intents) +bot = Vocard( + command_prefix=get_prefix, + help_command=None, + tree_cls=CommandCheck, + chunk_guilds_at_startup=False, + member_cache_flags=member_cache, + activity=discord.Activity(type=discord.ActivityType.listening, name="Starting..."), + case_insensitive=True, + intents=intents +) if __name__ == "__main__": update.checkVersion(withMsg=True) diff --git a/settings Example.json b/settings Example.json index 3bead3d..5bb6bb8 100644 --- a/settings Example.json +++ b/settings Example.json @@ -9,6 +9,9 @@ } }, "prefix": "?", + "activity":[ + {"listen": "/help"} + ], "bot_access_user": [], "color_code":"0xb3b3b3", "default_max_queue": 1000,