@@ -34,19 +34,25 @@ async def getEventMessage(event: Event, bot: OperationBot = None,
3434
3535
3636async 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
6874async 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