(sessions): Add guild join and leave hooks.
This commit is contained in:
@@ -296,6 +296,63 @@ async def session_voice_tracker(client, member, before, after):
|
|||||||
session = Session.start(member, after)
|
session = Session.start(member, after)
|
||||||
|
|
||||||
|
|
||||||
|
async def leave_guild_sessions(client, guild):
|
||||||
|
"""
|
||||||
|
`guild_leave` hook.
|
||||||
|
Close all sessions in the guild when we leave.
|
||||||
|
"""
|
||||||
|
sessions = list(Session.sessions[guild.id].values())
|
||||||
|
for session in sessions:
|
||||||
|
session.finish()
|
||||||
|
client.log(
|
||||||
|
"Left {} (gid:{}) and closed {} ongoing study sessions.".format(guild.name, guild.id, len(sessions)),
|
||||||
|
context="SESSION_TRACKER"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def join_guild_sessions(client, guild):
|
||||||
|
"""
|
||||||
|
`guild_join` hook.
|
||||||
|
Refresh all sessions for the guild when we rejoin.
|
||||||
|
"""
|
||||||
|
# Delete existing current sessions, which should have been closed when we left
|
||||||
|
# It is possible we were removed from the guild during an outage
|
||||||
|
current_sessions.delete_where(guildid=guild.id)
|
||||||
|
|
||||||
|
untracked = untracked_channels.get(guild.id).data
|
||||||
|
members = [
|
||||||
|
member
|
||||||
|
for channel in guild.voice_channels
|
||||||
|
for member in channel.members
|
||||||
|
if channel.members and channel.id not in untracked
|
||||||
|
]
|
||||||
|
for member in members:
|
||||||
|
client.log(
|
||||||
|
"Starting new session for '{}' (uid: {}) in '{}' (cid: {}) of '{}' (gid: {})".format(
|
||||||
|
member.name,
|
||||||
|
member.id,
|
||||||
|
member.voice.channel.name,
|
||||||
|
member.voice.channel.id,
|
||||||
|
member.guild.name,
|
||||||
|
member.guild.id
|
||||||
|
),
|
||||||
|
context="SESSION_TRACKER",
|
||||||
|
level=logging.INFO,
|
||||||
|
post=False
|
||||||
|
)
|
||||||
|
Session.start(member, member.voice)
|
||||||
|
|
||||||
|
# Log newly started sessions
|
||||||
|
client.log(
|
||||||
|
"Joined {} (gid:{}) and started {} new study sessions from current voice channel members.".format(
|
||||||
|
guild.name,
|
||||||
|
guild.id,
|
||||||
|
len(members)
|
||||||
|
),
|
||||||
|
context="SESSION_TRACKER",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def _init_session_tracker(client):
|
async def _init_session_tracker(client):
|
||||||
"""
|
"""
|
||||||
Load ongoing saved study sessions into the session cache,
|
Load ongoing saved study sessions into the session cache,
|
||||||
@@ -405,6 +462,8 @@ async def _init_session_tracker(client):
|
|||||||
|
|
||||||
# Now that we are in a valid initial state, attach the session event handler
|
# Now that we are in a valid initial state, attach the session event handler
|
||||||
client.add_after_event("voice_state_update", session_voice_tracker)
|
client.add_after_event("voice_state_update", session_voice_tracker)
|
||||||
|
client.add_after_event("guild_remove", leave_guild_sessions)
|
||||||
|
client.add_after_event("guild_join", join_guild_sessions)
|
||||||
|
|
||||||
|
|
||||||
@module.launch_task
|
@module.launch_task
|
||||||
|
|||||||
Reference in New Issue
Block a user