55
66import disnake
77import meetings
8- from disnake import (
9- ApplicationCommandInteraction ,
10- GuildCommandInteraction ,
11- MessageInteraction ,
12- )
8+ from disnake import ApplicationCommandInteraction , GuildCommandInteraction
139from disnake .ext .commands import (
1410 Bot ,
1511 Cog ,
3430 maybe_clear_reaction ,
3531 should_handle_reaction ,
3632)
37- from bot .utils .ui import ButtonGroupOption , ButtonGroupView , DropdownView
33+ from bot .utils .ui import ButtonGroupOption , ButtonGroupView
3834
3935from ._zoom import (
4036 REPOST_EMOJI ,
4440 get_zoom_meeting_id ,
4541 is_allowed_zoom_access ,
4642 make_zoom_send_kwargs ,
43+ zoom_client ,
4744 zoom_impl ,
4845)
4946
@@ -338,15 +335,17 @@ async def zoom_stop(
338335 async def zoom_users (self , inter : ApplicationCommandInteraction ):
339336 """(Bot owner only) List users who have access to the zoom commands"""
340337 try :
341- users = await meetings .list_zoom_users (token = settings . ZOOM_JWT )
338+ users = await zoom_client .list_zoom_users ()
342339 except asyncio .exceptions .TimeoutError :
343340 logger .exception ("zoom request timed out" )
344341 await inter .send (
345342 "🚨 _Request to Zoom API timed out. This may be due to rate limiting. Try again later._"
346343 )
347344 return
348345 licensed_user_emails = {
349- user .email for user in users if user .type == meetings .ZoomPlanType .LICENSED
346+ user .email
347+ for user in users
348+ if user .type == meetings .zoom .ZoomPlanType .LICENSED
350349 }
351350 description = "\n " .join (
352351 tuple (
@@ -362,125 +361,6 @@ async def zoom_users(self, inter: ApplicationCommandInteraction):
362361 embed .set_footer (text = "👑 = Licensed" )
363362 await inter .send (embed = embed )
364363
365- @zoom_command .sub_command (
366- name = "license" , hidden = True , help = "Upgrade a user to the Licensed plan type."
367- )
368- @is_owner ()
369- async def zoom_license (
370- self ,
371- inter : ApplicationCommandInteraction ,
372- user : disnake .User ,
373- ):
374- """(Bot owner only) Upgrade a Zoom user to a Licensed plan"""
375- assert inter .user is not None
376- if user .id not in settings .ZOOM_USERS :
377- await inter .send (f"🚨 _{ user .mention } is not a configured Zoom user._" )
378- return
379-
380- await inter .send (
381- f"✋ **{ user .mention } will be upgraded to a Licensed plan**." ,
382- )
383- zoom_user_id = settings .ZOOM_USERS [user .id ]
384- try :
385- logger .info (f"attempting to upgrade user { user .id } to licensed plan" )
386- await meetings .update_zoom_user (
387- token = settings .ZOOM_JWT ,
388- user_id = zoom_user_id ,
389- data = {"type" : meetings .ZoomPlanType .LICENSED },
390- )
391- except meetings .MaxZoomLicensesError :
392- try :
393- users = await meetings .list_zoom_users (token = settings .ZOOM_JWT )
394- except asyncio .exceptions .TimeoutError :
395- logger .exception ("zoom request timed out" )
396- await inter .send (
397- "🚨 _Request to Zoom API timed out. This may be due to rate limiting. Try again later._"
398- )
399- return
400- zoom_to_discord_user_mapping = {
401- email .lower (): disnake_id
402- for disnake_id , email in settings .ZOOM_USERS .items ()
403- }
404- # Discord user IDs for Licensed users
405- licensed_user_discord_ids = tuple (
406- zoom_to_discord_user_mapping [user .email .lower ()]
407- for user in users
408- if user .email .lower () in zoom_to_discord_user_mapping
409- and user .type == meetings .ZoomPlanType .LICENSED
410- # Don't allow de-licensing the bot owner, of course
411- and zoom_to_discord_user_mapping [user .email .lower ()] != settings .OWNER_ID
412- )
413- if len (licensed_user_discord_ids ):
414- options = [
415- disnake .SelectOption (
416- label = settings .ZOOM_USERS [discord_user_id ], value = discord_user_id
417- )
418- for discord_user_id in licensed_user_discord_ids
419- ]
420-
421- async def on_select (select_interaction : MessageInteraction , value : str ):
422- downgraded_user_id = int (value )
423- await select_interaction .response .edit_message (
424- content = f"☑️ Selected <@!{ downgraded_user_id } > to downgrade." ,
425- view = None ,
426- )
427- try :
428- logger .info (
429- f"attempting to downgrade user { downgraded_user_id } to basic plan"
430- )
431- await meetings .update_zoom_user (
432- token = settings .ZOOM_JWT ,
433- user_id = settings .ZOOM_USERS [downgraded_user_id ],
434- data = {"type" : meetings .ZoomPlanType .BASIC },
435- )
436- except meetings .ZoomClientError :
437- logger .exception (f"failed to downgrade user { downgraded_user_id } " )
438- await inter .send (
439- f"🚨 _Failed to downgrade <@!{ downgraded_user_id } >. Check the logs for details._"
440- )
441- try :
442- logger .info (
443- f"re-attempting to upgrade user { user .id } to licensed plan"
444- )
445- await meetings .update_zoom_user (
446- token = settings .ZOOM_JWT ,
447- user_id = zoom_user_id ,
448- data = {"type" : meetings .ZoomPlanType .LICENSED },
449- )
450- except meetings .ZoomClientError :
451- logger .exception (f"failed to upgrade user { user .id } " )
452- await inter .send (
453- f"🚨 _Failed to upgrade { user .mention } . Check the logs for details._"
454- )
455- await inter .send (
456- f"👑 **{ user .mention } successfully upgraded to Licensed plan.**\n <@!{ downgraded_user_id } > downgraded to Basic."
457- )
458-
459- view = DropdownView .from_options (
460- options = options ,
461- on_select = on_select ,
462- placeholder = "Choose a user" ,
463- creator_id = inter .user .id ,
464- )
465- await inter .send ("Choose a user to downgrade to Basic." , view = view )
466- else :
467- await inter .send (
468- "🚨 _No available users to downgrade on Discord. Go to the Zoom account settings to manage licenses_."
469- )
470- return
471- return
472- except meetings .ZoomClientError as error :
473- await inter .send (f"🚨 _{ error .args [0 ]} _" )
474- return
475- except Exception :
476- logger .exception (f"failed to license user { user } " )
477- await inter .send (
478- f"🚨 _Failed to license user { user .mention } . Check the logs for details._"
479- )
480- return
481- else :
482- await inter .send (f"👑 **{ user .mention } upgraded to a Licensed plan**." )
483-
484364 @slash_command (name = "watch2gether" )
485365 async def watch2gether_command (
486366 self , inter : ApplicationCommandInteraction , video_url : Optional [str ] = None
0 commit comments