#Infinite Event loops
1 messages · Page 1 of 1 (latest)
Hey! Once your issue is solved, press the button below to close this thread!
basically in the callback for a member update event, my bot updates a member
so it just loops forever
pmo
i tried storing a list of MemberUpdate() objects and comparing them to the incoming event but it doesn't seem to work (prob some random annoying attribute)
@listen(MemberUpdate)
async def member_update(self, event: MemberUpdate):
if event in self.event_by_bot:
return
this is how i add objects to the list
def add_event_by_bot(self, before: Member, role: Role, added: bool = True):
print(before)
after = before
after.roles.append(role) if added else after.roles.remove(role)
self.event_by_bot.append(
MemberUpdate(before.guild.id, before, after, bot=self.bot)
)
can you state more clearly your use case like what are you doing maybe we can think on an alternative way to solve?
sure
basically i want it so
u cant get given a role unless u use the command
since everytime the role is given, their role must be updated backend
@listen(MemberUpdate)
async def member_update(self, event: MemberUpdate):
if event in self.event_by_bot:
return
after_roles = event.after.roles
before_roles = event.before.roles
senior_tester_id = config.get_setting("senior_tester_role", 0)
senior_tester_ids = config.get_setting("senior_testers_roles", {})
tester_id = config.get_setting("tester_role", 0)
tester_ids = config.get_setting("tester_roles", {})
roles = (
[
event.after.guild.get_role(senior_tester_id),
event.after.guild.get_role(tester_id),
]
+ [
event.after.guild.get_role(senior_tester_ids[gamemode])
for gamemode in senior_tester_ids
]
+ [
event.after.guild.get_role(tester_ids[gamemode])
for gamemode in tester_ids
]
)
for role in roles:
if role in after_roles and role not in before_roles: # role gained
self.add_event_by_bot(
event.before, event.before.guild.get_role(role.id), False
)
await event.after.remove_role(role.id, "only use /tester promote")
break
if role not in after_roles and role in before_roles:
self.add_event_by_bot(
event.before, event.before.guild.get_role(role.id)
)
await event.after.add_role(role.id, "only use /tester demmote")
break
now that's fine and all
let's say someone uses /tester promote and the member updates
this event will be listened to
it will remove the role but that counts as a member update and will trigure itself infinitely
@dusky vortex
@buoyant sail any ideas?