Skip to content

Commit

Permalink
Server specific data cleanup (#2377)
Browse files Browse the repository at this point in the history
* use guild.id in server_specific_data key

* auto black the whole repo.
  • Loading branch information
itsTheFae committed Dec 20, 2023
1 parent 7cde7ad commit 9c9e6ca
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 44 deletions.
91 changes: 50 additions & 41 deletions musicbot/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ def _autopause(player):
log.info("Initial autopause in empty channel")

player.pause()
self.server_specific_data[player.voice_client.channel.guild][
self.server_specific_data[player.voice_client.channel.guild.id][
"auto_paused"
] = True

Expand Down Expand Up @@ -557,7 +557,7 @@ async def disconnect_voice_client(self, guild):
await self.reset_player_inactivity(player)

if self.config.leave_inactive_channel:
event, active = self.server_specific_data[guild]["inactive_vc_timer"]
event, active = self.server_specific_data[guild.id]["inactive_vc_timer"]
if active and not event.is_set():
event.set()

Expand Down Expand Up @@ -694,7 +694,7 @@ async def on_player_play(self, player, entry):
return

guild = player.voice_client.guild
last_np_msg = self.server_specific_data[guild]["last_np_msg"]
last_np_msg = self.server_specific_data[guild.id]["last_np_msg"]

if self.config.nowplaying_channels:
for potential_channel_id in self.config.nowplaying_channels:
Expand Down Expand Up @@ -736,7 +736,9 @@ async def on_player_play(self, player, entry):
content.title = newmsg

# send it in specified channel
self.server_specific_data[guild]["last_np_msg"] = await self.safe_send_message(
self.server_specific_data[guild.id][
"last_np_msg"
] = await self.safe_send_message(
channel,
content if self.config.embeds else newmsg,
expire_in=30 if self.config.delete_nowplaying else 0,
Expand Down Expand Up @@ -771,7 +773,7 @@ async def on_player_finished_playing(self, player, **_):
# delete last_np_msg somewhere if we have cached it
if self.config.delete_nowplaying:
guild = player.voice_client.guild
last_np_msg = self.server_specific_data[guild]["last_np_msg"]
last_np_msg = self.server_specific_data[guild.id]["last_np_msg"]
if last_np_msg:
await self.safe_delete_message(last_np_msg)

Expand All @@ -780,7 +782,7 @@ def _autopause(player):
log.info("Player finished playing, autopaused in empty channel")

player.pause()
self.server_specific_data[player.voice_client.channel.guild][
self.server_specific_data[player.voice_client.channel.guild.id][
"auto_paused"
] = True

Expand Down Expand Up @@ -922,7 +924,7 @@ async def update_now_playing_status(self):
self.last_status = game

async def update_now_playing_message(self, guild, message, *, channel=None):
lnp = self.server_specific_data[guild]["last_np_msg"]
lnp = self.server_specific_data[guild.id]["last_np_msg"]
m = None

if message is None and lnp:
Expand Down Expand Up @@ -952,7 +954,7 @@ async def update_now_playing_message(self, guild, message, *, channel=None):
elif channel: # No previous message
m = await self.safe_send_message(channel, message, quiet=True)

self.server_specific_data[guild]["last_np_msg"] = m
self.server_specific_data[guild.id]["last_np_msg"] = m

async def serialize_queue(self, guild, *, dir=None):
"""
Expand Down Expand Up @@ -1064,20 +1066,20 @@ async def _load_guild_options(self, guild: discord.Guild):
options = Json(opt_file)
guild_prefix = options.get("command_prefix", None)
if guild_prefix:
self.server_specific_data[guild]["command_prefix"] = guild_prefix
self.server_specific_data[guild.id]["command_prefix"] = guild_prefix
log.info(f"Custom command prefix for: {guild.name} Prefix: {guild_prefix}")

async def _save_guild_options(self, guild: discord.Guild):
opt_file = f"data/{guild.id}/options.json"
opt_dict = {
"command_prefix": self.server_specific_data[guild]["command_prefix"]
"command_prefix": self.server_specific_data[guild.id]["command_prefix"]
}
with open(opt_file, "w") as fh:
fh.write(json.dumps(opt_dict))

def _get_guild_cmd_prefix(self, guild: discord.Guild):
if self.config.enable_options_per_guild:
prefix = self.server_specific_data[guild]["command_prefix"]
prefix = self.server_specific_data[guild.id]["command_prefix"]
if not prefix:
return self.config.command_prefix
else:
Expand Down Expand Up @@ -1558,12 +1560,12 @@ def _remove_url_from_autoplaylist(self, url):
log.debug("Removed {} from autoplaylist".format(url))

async def handle_vc_inactivity(self, guild: discord.Guild):
event, active = self.server_specific_data[guild]["inactive_vc_timer"]
event, active = self.server_specific_data[guild.id]["inactive_vc_timer"]

if active:
log.debug(f"Channel activity already waiting in guild: {guild}")
return
self.server_specific_data[guild]["inactive_vc_timer"] = (event, True)
self.server_specific_data[guild.id]["inactive_vc_timer"] = (event, True)

try:
log.info(
Expand All @@ -1582,15 +1584,17 @@ async def handle_vc_inactivity(self, guild: discord.Guild):
f"Channel activity timer canceled for: {guild.me.voice.channel.name} in {guild.name}"
)
finally:
self.server_specific_data[guild]["inactive_vc_timer"] = (event, False)
self.server_specific_data[guild.id]["inactive_vc_timer"] = (event, False)
event.clear()

async def handle_player_inactivity(self, player):
if not self.config.leave_player_inactive_for:
return
channel = player.voice_client.channel
guild = channel.guild
event, event_active = self.server_specific_data[guild]["inactive_player_timer"]
event, event_active = self.server_specific_data[guild.id][
"inactive_player_timer"
]

if str(channel.id) in str(self.config.autojoin_channels):
log.debug(
Expand All @@ -1601,7 +1605,7 @@ async def handle_player_inactivity(self, player):
if event_active:
log.debug(f"Player activity timer already waiting in guild: {guild}")
return
self.server_specific_data[guild]["inactive_player_timer"] = (event, True)
self.server_specific_data[guild.id]["inactive_player_timer"] = (event, True)

try:
log.info(
Expand All @@ -1620,14 +1624,17 @@ async def handle_player_inactivity(self, player):
f"Player activity timer canceled for: {channel.name} in {guild.name}"
)
finally:
self.server_specific_data[guild]["inactive_player_timer"] = (event, False)
self.server_specific_data[guild.id]["inactive_player_timer"] = (
event,
False,
)
event.clear()

async def reset_player_inactivity(self, player):
if not self.config.leave_player_inactive_for:
return
guild = player.voice_client.channel.guild
event, active = self.server_specific_data[guild]["inactive_player_timer"]
event, active = self.server_specific_data[guild.id]["inactive_player_timer"]
if active and not event.is_set():
event.set()
log.debug("Player activity timer is being reset.")
Expand Down Expand Up @@ -2793,9 +2800,9 @@ async def _cmd_play_playlist_async(
and player.current_entry.duration > permissions.max_song_length
):
await self.safe_delete_message(
self.server_specific_data[channel.guild]["last_np_msg"]
self.server_specific_data[channel.guild.id]["last_np_msg"]
)
self.server_specific_data[channel.guild]["last_np_msg"] = None
self.server_specific_data[channel.guild.id]["last_np_msg"] = None
skipped = True
player.skip()
entries_added.pop()
Expand Down Expand Up @@ -3219,11 +3226,11 @@ async def cmd_np(self, player, channel, guild, message):
"""

if player.current_entry:
if self.server_specific_data[guild]["last_np_msg"]:
if self.server_specific_data[guild.id]["last_np_msg"]:
await self.safe_delete_message(
self.server_specific_data[guild]["last_np_msg"]
self.server_specific_data[guild.id]["last_np_msg"]
)
self.server_specific_data[guild]["last_np_msg"] = None
self.server_specific_data[guild.id]["last_np_msg"] = None

# TODO: Fix timedelta garbage with util function
song_progress = ftimedelta(timedelta(seconds=player.progress))
Expand Down Expand Up @@ -3312,7 +3319,7 @@ async def cmd_np(self, player, channel, guild, message):
if thumb_url:
content.set_image(url=thumb_url)

self.server_specific_data[guild][
self.server_specific_data[guild.id][
"last_np_msg"
] = await self.safe_send_message(
channel, content if self.config.embeds else np_text, expire_in=30
Expand Down Expand Up @@ -4113,7 +4120,7 @@ async def cmd_clean(self, message, channel, guild, author, search_range=50):

def is_possible_command_invoke(entry):
prefix_list = [self._get_guild_cmd_prefix(channel.guild)] + list(
self.server_specific_data[channel.guild]["session_prefix_history"]
self.server_specific_data[channel.guild.id]["session_prefix_history"]
)
# The semi-cursed use of [^ -~] should match all kinds of unicode, which could be an issue.
# If it is a problem, the best solution is probably adding a dependency for emoji.
Expand Down Expand Up @@ -4404,7 +4411,7 @@ async def cmd_setprefix(self, guild, leftover_args, prefix):
)

if "clear" == prefix:
self.server_specific_data[guild]["command_prefix"] = None
self.server_specific_data[guild.id]["command_prefix"] = None
await self._save_guild_options(guild)
return Response(
self.str.get(
Expand All @@ -4414,10 +4421,12 @@ async def cmd_setprefix(self, guild, leftover_args, prefix):
)

old_prefix = self._get_guild_cmd_prefix(guild)
self.server_specific_data[guild]["command_prefix"] = prefix
self.server_specific_data[guild]["session_prefix_history"].add(old_prefix)
if len(self.server_specific_data[guild]["session_prefix_history"]) > 3:
self.server_specific_data[guild]["session_prefix_history"].pop()
self.server_specific_data[guild.id]["command_prefix"] = prefix
self.server_specific_data[guild.id]["session_prefix_history"].add(
old_prefix
)
if len(self.server_specific_data[guild.id]["session_prefix_history"]) > 3:
self.server_specific_data[guild.id]["session_prefix_history"].pop()
await self._save_guild_options(guild)
return Response(
self.str.get(
Expand Down Expand Up @@ -4928,7 +4937,7 @@ async def on_inactivity_timeout_expired(self, voice_channel):

if voice_channel:
try:
last_np_msg = self.server_specific_data[guild]["last_np_msg"]
last_np_msg = self.server_specific_data[guild.id]["last_np_msg"]
channel = last_np_msg.channel
if self.config.embeds:
embed = self._gen_embed()
Expand All @@ -4955,7 +4964,7 @@ async def on_voice_state_update(self, member, before, after):

if self.config.leave_inactive_channel:
guild = member.guild
event, active = self.server_specific_data[guild]["inactive_vc_timer"]
event, active = self.server_specific_data[guild.id]["inactive_vc_timer"]

if before.channel and self.user in before.channel.members:
if str(before.channel.id) in str(self.config.autojoin_channels):
Expand Down Expand Up @@ -5011,7 +5020,7 @@ async def on_voice_state_update(self, member, before, after):

autopause_msg = "{state} in {channel.guild.name}/{channel.name} {reason}"

auto_paused = self.server_specific_data[channel.guild]["auto_paused"]
auto_paused = self.server_specific_data[channel.guild.id]["auto_paused"]

try:
player = await self.get_player(channel)
Expand Down Expand Up @@ -5041,7 +5050,7 @@ def is_active(member):
).strip()
)

self.server_specific_data[player.voice_client.guild][
self.server_specific_data[player.voice_client.guild.id][
"auto_paused"
] = False
player.resume()
Expand All @@ -5061,7 +5070,7 @@ def is_active(member):
).strip()
)

self.server_specific_data[player.voice_client.guild][
self.server_specific_data[player.voice_client.guild.id][
"auto_paused"
] = True
player.pause()
Expand All @@ -5078,7 +5087,7 @@ def is_active(member):
).strip()
)

self.server_specific_data[player.voice_client.guild][
self.server_specific_data[player.voice_client.guild.id][
"auto_paused"
] = False
player.resume()
Expand All @@ -5095,7 +5104,7 @@ def is_active(member):
).strip()
)

self.server_specific_data[player.voice_client.guild][
self.server_specific_data[player.voice_client.guild.id][
"auto_paused"
] = False
player.resume()
Expand All @@ -5110,7 +5119,7 @@ def is_active(member):
).strip()
)

self.server_specific_data[player.voice_client.guild][
self.server_specific_data[player.voice_client.guild.id][
"auto_paused"
] = True
player.pause()
Expand Down Expand Up @@ -5159,13 +5168,13 @@ async def on_guild_available(self, guild: discord.Guild):
player = self.get_player_in(guild)

if player and player.is_paused:
av_paused = self.server_specific_data[guild]["availability_paused"]
av_paused = self.server_specific_data[guild.id]["availability_paused"]

if av_paused:
log.debug(
'Resuming player in "{}" due to availability.'.format(guild.name)
)
self.server_specific_data[guild]["availability_paused"] = False
self.server_specific_data[guild.id]["availability_paused"] = False
player.resume()

async def on_guild_unavailable(self, guild: discord.Guild):
Expand All @@ -5177,7 +5186,7 @@ async def on_guild_unavailable(self, guild: discord.Guild):
log.debug(
'Pausing player in "{}" due to unavailability.'.format(guild.name)
)
self.server_specific_data[guild]["availability_paused"] = True
self.server_specific_data[guild.id]["availability_paused"] = True
player.pause()

def voice_client_in(self, guild):
Expand Down
2 changes: 1 addition & 1 deletion musicbot/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def __init__(
*,
preface="An error has occured:",
footnote="",
expire_in=0
expire_in=0,
):
self.issue = issue
self.solution = solution
Expand Down
4 changes: 2 additions & 2 deletions musicbot/playlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ async def add_entry(self, song_url, *, head, **meta):
info.get("title", "Untitled"),
info.get("duration", None) or None,
self.downloader.ytdl.prepare_filename(info),
**meta
**meta,
)
self._add_entry(entry, head=head)
return entry, (1 if head else len(self.entries))
Expand Down Expand Up @@ -251,7 +251,7 @@ async def import_from(self, playlist_url, head, **meta):
item.get("title", "Untitled"),
item.get("duration", 0) or 0,
self.downloader.ytdl.prepare_filename(item),
**meta
**meta,
)

self._add_entry(entry, head=head)
Expand Down

0 comments on commit 9c9e6ca

Please sign in to comment.