From bb179ebc2319686c1f6621521afbb29dfe73abc8 Mon Sep 17 00:00:00 2001 From: XenonPK <8293194+XenonPK@users.noreply.github.com> Date: Mon, 3 Jul 2023 09:42:40 +0100 Subject: [PATCH] Add bots option to exclude other bot users from autoplay logic (#301) * Add bots option to exclude other bot users from autoplay logic * Refactor get_user_count_in_channel to make it more readable * Remove commandline option and rename config key for "bots" * Remove --bots from argparse * Correct when_nobody_in_channel_ignore config read typo * Fix when_nobody_in_channel_ignore configuration read order --- configuration.default.ini | 1 + configuration.example.ini | 4 ++++ mumbleBot.py | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/configuration.default.ini b/configuration.default.ini index b1cbee7..a4c4144 100644 --- a/configuration.default.ini +++ b/configuration.default.ini @@ -65,6 +65,7 @@ tmp_folder_max_size = 10 username = botamusique volume = 0.8 when_nobody_in_channel = nothing +when_nobody_in_channel_ignore = [webinterface] access_address = http://127.0.0.1:8181 diff --git a/configuration.example.ini b/configuration.example.ini index c38ee9c..8df4f00 100644 --- a/configuration.example.ini +++ b/configuration.example.ini @@ -134,6 +134,10 @@ port = 64738 # - leave empty (do nothing) #when_nobody_in_channel = +# 'when_nobody_in_channel_ignore': Specify the list of users that should be ignored, from the list of active users. +# This is typically used when other bots are present in the channel. +#when_nobody_in_channel_ignore = + # 'youtube_query_cookie': Sometimes youtube will block the request of our bot and # request the bot to complete a captcha to verify the request is not made by a # bot. diff --git a/mumbleBot.py b/mumbleBot.py index 957ae41..0e3fd85 100644 --- a/mumbleBot.py +++ b/mumbleBot.py @@ -103,6 +103,7 @@ class MumbleBot: tokens = var.config.get("server", "tokens") tokens = tokens.split(',') + if args.user: self.username = args.user else: @@ -132,8 +133,11 @@ class MumbleBot: self.join_channel() self.mumble.set_bandwidth(self.bandwidth) + bots = var.config.get("bot", "when_nobody_in_channel_ignore",fallback="") + self.bots = set(bots.split(',')) self._user_in_channel = self.get_user_count_in_channel() + # ====== Volume ====== self.volume_helper = util.VolumeHelper() @@ -374,8 +378,18 @@ class MumbleBot: # ======================= def get_user_count_in_channel(self): + # Get the channel, based on the channel id own_channel = self.mumble.channels[self.mumble.users.myself['channel_id']] - return len(own_channel.get_users()) + + # Build set of unique usernames + users = set([user.get_property("name") for user in own_channel.get_users()]) + + # Exclude all bots from the set of usernames + users = users.difference(self.bots) + + # Return the number of elements in the set, as the final user count + return len(users) + def users_changed(self, user, message): # only check if there is one more user currently in the channel