fix (rooms): Improve last-minute booking handling.
Fix an issue where channel permissions wouldn't get updated. Fix an issue where a member couldn't cancel an open session.
This commit is contained in:
@@ -103,10 +103,29 @@ async def cmd_rooms(ctx):
|
|||||||
return await ctx.error_reply("No valid bookings selected for cancellation.")
|
return await ctx.error_reply("No valid bookings selected for cancellation.")
|
||||||
cost = len(to_cancel) * ctx.guild_settings.accountability_price.value
|
cost = len(to_cancel) * ctx.guild_settings.accountability_price.value
|
||||||
|
|
||||||
|
slotids = [row['slotid'] for row in to_cancel]
|
||||||
accountability_members.delete_where(
|
accountability_members.delete_where(
|
||||||
userid=ctx.author.id,
|
userid=ctx.author.id,
|
||||||
slotid=[row['slotid'] for row in to_cancel]
|
slotid=slotids
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Handle case where the slot has already opened
|
||||||
|
for row in to_cancel:
|
||||||
|
aguild = AGuild.cache.get(row['guildid'], None)
|
||||||
|
if aguild:
|
||||||
|
if aguild.upcoming_slot and aguild.upcoming_slot.data and (aguild.upcoming_slot.data.slotid in slotids):
|
||||||
|
aguild.upcoming_slot.members.pop(ctx.author.id, None)
|
||||||
|
if aguild.upcoming_slot.channel:
|
||||||
|
try:
|
||||||
|
await aguild.upcoming_slot.channel.set_permissions(
|
||||||
|
ctx.author,
|
||||||
|
overwrite=None
|
||||||
|
)
|
||||||
|
except discord.HTTPException:
|
||||||
|
pass
|
||||||
|
await aguild.upcoming_slot.update_status()
|
||||||
|
break
|
||||||
|
|
||||||
ctx.alion.addCoins(-cost)
|
ctx.alion.addCoins(-cost)
|
||||||
await ctx.embed_reply(
|
await ctx.embed_reply(
|
||||||
"Successfully canceled your bookings."
|
"Successfully canceled your bookings."
|
||||||
@@ -232,6 +251,11 @@ async def cmd_rooms(ctx):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
slot.members[ctx.author.id] = SlotMember(slot.data.slotid, ctx.author.id, ctx.guild)
|
slot.members[ctx.author.id] = SlotMember(slot.data.slotid, ctx.author.id, ctx.guild)
|
||||||
|
# Also update the channel permissions
|
||||||
|
try:
|
||||||
|
await slot.channel.set_permissions(ctx.author, view_channel=True, connect=True)
|
||||||
|
except discord.HTTPException:
|
||||||
|
pass
|
||||||
await slot.update_status()
|
await slot.update_status()
|
||||||
ctx.alion.addCoins(-cost)
|
ctx.alion.addCoins(-cost)
|
||||||
await ctx.embed_reply(
|
await ctx.embed_reply(
|
||||||
|
|||||||
Reference in New Issue
Block a user