Skip to content

Commit bc9e541

Browse files
committed
Remove extra messages when necessary
For example, when the 21st reaction gets removed.
1 parent 0746b21 commit bc9e541

2 files changed

Lines changed: 16 additions & 9 deletions

File tree

commandListener.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -969,15 +969,16 @@ async def _load(self, _: Context, event: Event, data: str,
969969
# await ctx.send("Event messages created")
970970

971971
async def _update_event(self, event: Event, import_db=False,
972-
reorder=True, export=True):
972+
reorder=True, export=True, exact_number=True):
973973
# TODO: Move to a more appropriate location
974974
if import_db:
975975
await self.bot.import_database()
976976
# Event instance might have changed because of DB import, get again
977977
event = EventDatabase.getEventByMessage(event.messageIDList[0])
978978

979979
try:
980-
messages = await msgFnc.getEventMessages(event, self.bot)
980+
messages = await msgFnc.getEventMessages(event, self.bot,
981+
exact_number=exact_number)
981982
except MessageNotFound:
982983
messages = await msgFnc.createEventMessages(event,
983984
self.bot.eventchannel)

messageFunctions.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,25 @@ async def getEventMessage(event: Event, bot: OperationBot = None,
3434

3535

3636
async def getEventMessages(event: Event, bot: OperationBot = None,
37-
archived=False, channel: TextChannel = None) \
37+
archived=False, channel: TextChannel = None,
38+
exact_number=True) \
3839
-> List[Message]:
3940
"""Get all messages related to an event.
4041
4142
Raises MessageNotFound if the message is missing or if the event embeds
42-
require more messages than can currently be found."""
43+
require more messages than can currently be found.
44+
45+
If exact_number is set, also raises an error if too many messages can be
46+
found."""
4347
messages = []
4448
for messageID in event.messageIDList:
4549
messages.append(await getEventMessage(
4650
event, bot=bot, archived=archived, message_id=messageID,
4751
channel=channel))
4852
if len(messages) < len(event.createEmbeds()):
4953
raise MessageNotFound("Not all event messages found")
54+
if exact_number and len(messages) > len(event.createEmbeds()):
55+
raise MessageNotFound("Too many event messages found")
5056
return messages
5157

5258

@@ -67,7 +73,7 @@ async def sortEventMessages(bot: OperationBot):
6773

6874
async def createEventMessages(event: Event, channel: TextChannel,
6975
update_id=True) -> List[Message]:
70-
"""Create new or missing event messages."""
76+
"""Create new or missing event messages, delete extra messages."""
7177
try:
7278
all_messages = await getEventMessages(event, channel=channel)
7379
except MessageNotFound:
@@ -76,7 +82,7 @@ async def createEventMessages(event: Event, channel: TextChannel,
7682
# All messages were found without issues, nothing to do
7783
return all_messages
7884

79-
messages = []
85+
messages: List[Message] = []
8086
not_found: List[int] = []
8187
for message_id in event.messageIDList:
8288
try:
@@ -94,9 +100,9 @@ async def createEventMessages(event: Event, channel: TextChannel,
94100
# We have extra messages that need to be deleted. We could try to reuse
95101
# the messages for other events instead of deleting, but keeping track
96102
# of that would be too complicated.
97-
for message_id in message_ids[:difference]:
98-
message_ids.remove(message_id)
103+
for message_id in message_ids[difference:]:
99104
message = await channel.fetch_message(message_id)
105+
messages.remove(message)
100106
await message.delete()
101107
elif difference < 0:
102108
# We have too few messages, create new ones
@@ -106,9 +112,9 @@ async def createEventMessages(event: Event, channel: TextChannel,
106112
# will be updated afterwards anyway.
107113
message = await channel.send(embed=embeds[i])
108114
messages.append(message)
109-
message_ids.append(message.id)
110115

111116
if update_id:
117+
message_ids = [message.id for message in messages]
112118
event.messageIDList = list(message_ids)
113119

114120
return messages

0 commit comments

Comments
 (0)