Skip to content

Commit

Permalink
Merge pull request #107 from esoviscode/fix-error-message
Browse files Browse the repository at this point in the history
Error messages are now updating instead of being sent multiple times
  • Loading branch information
Mixss authored Jan 22, 2023
2 parents d03a3d3 + 312d43b commit 8234388
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
7 changes: 5 additions & 2 deletions dnd-bot/dnd_bot/dc/ui/messager.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ async def send_message(channel_id: id, content: str):
await channel.send(content=content)

@staticmethod
async def send_dm_message(user_id: int, content: str | None, embed=None, view=None, files=None):
async def send_dm_message(user_id: int, content: str | None, embed=None, view=None, files=None, error=False):
user = Messager.bot.get_user(user_id)

# includes files; parameter files is a list of string file paths
Expand All @@ -21,7 +21,10 @@ async def send_dm_message(user_id: int, content: str | None, embed=None, view=No
files=[nextcord.File(f) for f in files])
else:
sent_message = await user.send(content=content, embed=embed, view=view)
MessageHolder.register_last_message_data(user_id, user.dm_channel.id, sent_message.id)
if not error:
MessageHolder.register_last_message_data(user_id, user.dm_channel.id, sent_message.id)
else:
MessageHolder.register_last_error_data(user_id, user.dm_channel.id, sent_message.id)

@staticmethod
async def edit_message(channel_id: int, message_id: int, new_content: str):
Expand Down
16 changes: 15 additions & 1 deletion dnd-bot/dnd_bot/dc/ui/views/view_game.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from dnd_bot.dc.ui.message_templates import MessageTemplates
from dnd_bot.dc.ui.messager import Messager
from dnd_bot.dc.utils.message_holder import MessageHolder
from dnd_bot.logic.game.handler_skills import HandlerSkills
from dnd_bot.logic.game.handler_attack import HandlerAttack
from dnd_bot.logic.game.handler_movement import HandlerMovement
Expand Down Expand Up @@ -99,6 +100,11 @@ async def end_turn(self, button: nextcord.ui.Button, interaction: nextcord.Inter
player.action_points, False)
await Messager.edit_last_user_message(user.discord_id, map_view_message)

error_data = MessageHolder.read_last_error_data(user.discord_id)
if error_data is not None:
MessageHolder.delete_last_error_data(user.discord_id)
await Messager.delete_message(error_data[0], error_data[1])

return


Expand Down Expand Up @@ -152,10 +158,18 @@ async def move_one_tile(direction, id_user, token, interaction: nextcord.Interac
"""shared function to move by one tile for all directions"""
status, error_message = await HandlerMovement.handle_movement(direction, 1, id_user, token)

error_data = MessageHolder.read_last_error_data(id_user)
if not status:
await interaction.response.send_message(error_message)
if error_data is not None:
await Messager.edit_message(error_data[0], error_data[1], f"**{error_message}**")
else:
await Messager.send_dm_message(id_user, f"**{error_message}**", error=True)
return

if error_data is not None:
MessageHolder.delete_last_error_data(id_user)
await Messager.delete_message(error_data[0], error_data[1])

lobby_players = Multiverse.get_game(token).user_list

for user in lobby_players:
Expand Down
19 changes: 19 additions & 0 deletions dnd-bot/dnd_bot/dc/utils/message_holder.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ class MessageHolder:

# keys of this dict are user discord ids; values are couples of channel id and message_id
user_last_message_data = {}
user_last_error_message_data = {}

@staticmethod
def register_last_message_data(user_id, channel_id, message_id):
Expand All @@ -16,3 +17,21 @@ def read_last_message_data(user_id):
return None
else:
return MessageHolder.user_last_message_data[str(user_id)]

@staticmethod
def register_last_error_data(user_id, channel_id, message_id):
"""saves last message data for given discord user id"""
MessageHolder.user_last_error_message_data[str(user_id)] = (channel_id, message_id)

@staticmethod
def read_last_error_data(user_id):
"""read last message data for given discord user id"""
if not str(user_id) in MessageHolder.user_last_error_message_data:
return None
else:
return MessageHolder.user_last_error_message_data[str(user_id)]

@staticmethod
def delete_last_error_data(user_id):
MessageHolder.user_last_error_message_data[str(user_id)] = None

0 comments on commit 8234388

Please sign in to comment.