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
This commit is contained in:
XenonPK
2023-07-03 09:42:40 +01:00
committed by GitHub
parent 6115a0d3ee
commit bb179ebc23
3 changed files with 20 additions and 1 deletions

View File

@ -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

View File

@ -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.

View File

@ -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