added seperate channels for leave and ban events

This commit is contained in:
brandons209 2019-09-23 02:35:10 -04:00
parent ceecffa25e
commit 564a96b68d
2 changed files with 62 additions and 9 deletions

View file

@ -51,3 +51,4 @@ turn
cah
pupper
pingtime
quotetools

View file

@ -33,6 +33,8 @@ class Welcome(getattr(commands, "Cog", object)):
guild_defaults = {
'enabled': False,
'channel': None,
'leave_channel': None,
'ban_channel': None,
'date': None,
'join': {
'enabled': True,
@ -83,7 +85,9 @@ class Welcome(getattr(commands, "Cog", object)):
guild = ctx.guild
c = await self.config.guild(guild).all()
channel = await self.__get_channel(ctx.guild)
channel = await self.__get_channel(ctx.guild, "join")
leave_channel = await self.__get_channel(ctx.guild, "leave")
ban_channel = await self.__get_channel(ctx.guild, "ban")
j = c['join']
jw = j['whisper']
@ -96,7 +100,9 @@ class Welcome(getattr(commands, "Cog", object)):
emb.add_field(name="General", value=(
"**Enabled:** {}\n"
"**Channel:** #{}\n"
).format(c['enabled'], channel))
"**Leave Channel:** #{}\n"
"**Ban/Unban Channel:** #{}\n"
).format(c['enabled'], channel, leave_channel, ban_channel))
emb.add_field(name="Join", value=(
"**Enabled:** {}\n"
"**Delete previous:** {}\n"
@ -194,6 +200,44 @@ class Welcome(getattr(commands, "Cog", object)):
"").format(channel)
)
@welcomeset.command(name='leave-channel')
async def welcomeset_leave_channel(self, ctx: commands.Context, channel: discord.TextChannel):
"""Sets the channel to be used for leave_channel event notices."""
if not self.__can_speak_in(channel):
await ctx.send(
("I do not have permission to send messages in {0.mention}. Check your permission settings and try again."
"").format(channel)
)
return
guild = ctx.guild
await self.config.guild(guild).leave_channel.set(channel.id)
await ctx.send(
("I will now send leave event notices to {0.mention}."
"").format(channel)
)
@welcomeset.command(name='channel')
async def welcomeset_channel(self, ctx: commands.Context, channel: discord.TextChannel):
"""Sets the channel to be used for event notices."""
if not self.__can_speak_in(channel):
await ctx.send(
("I do not have permission to send messages in {0.mention}. Check your permission settings and try again."
"").format(channel)
)
return
guild = ctx.guild
await self.config.guild(guild).ban_channel.set(channel.id)
await ctx.send(
("I will now send ban/unban event notices to {0.mention}."
"").format(channel)
)
@welcomeset.group(name='join')
async def welcomeset_join(self, ctx: commands.Context):
"""Change settings for join notices."""
@ -237,7 +281,7 @@ class Welcome(getattr(commands, "Cog", object)):
guild = ctx.guild
whisper_type = choice.value
channel = await self.__get_channel(ctx.guild)
channel = await self.__get_channel(ctx.guild, "join")
await self.config.guild(guild).join.whisper.state.set(whisper_type)
@ -673,7 +717,7 @@ class Welcome(getattr(commands, "Cog", object)):
if settings['delete'] and settings['last'] is not None:
# we need to delete the previous message
await self.__delete_message(guild, settings['last'])
await self.__delete_message(guild, settings['last'], event)
# regardless of success, remove reference to that message
await guild_settings.get_attr(event).last.set(None)
@ -682,7 +726,7 @@ class Welcome(getattr(commands, "Cog", object)):
# store it for (possible) deletion later
await guild_settings.get_attr(event).last.set(new_message and new_message.id)
async def __get_channel(self, guild: discord.Guild) -> discord.TextChannel:
async def __get_channel(self, guild: discord.Guild, event: str) -> discord.TextChannel:
"""Gets the best text channel to use for event notices.
Order of priority:
@ -693,7 +737,15 @@ class Welcome(getattr(commands, "Cog", object)):
channel = None
channel_id = await self.config.guild(guild).channel()
if event == 'join':
channel_id = await self.config.guild(guild).channel()
elif event == 'leave':
channel_id = await self.config.guild(guild).leave_channel()
elif event == 'ban' or event == 'unban':
channel_id = await self.config.guild(guild).ban_channel()
else:
raise TypeError("Wrong event type in __get_channel.")
if channel_id is not None:
channel = guild.get_channel(channel_id)
@ -733,11 +785,11 @@ class Welcome(getattr(commands, "Cog", object)):
else:
return int(msg.content)
async def __delete_message(self, guild: discord.Guild, message_id: int):
async def __delete_message(self, guild: discord.Guild, message_id: int, event: str):
"""Attempts to delete the message with the given ID."""
try:
await (await (await self.__get_channel(guild)).fetch_message(message_id)).delete()
await (await (await self.__get_channel(guild, event)).fetch_message(message_id)).delete()
except discord.NotFound:
log.warning(
("Failed to delete message (ID {}): not found"
@ -765,7 +817,7 @@ class Welcome(getattr(commands, "Cog", object)):
if count and count != 1:
plural = 's'
channel = await self.__get_channel(guild)
channel = await self.__get_channel(guild, event)
try:
return await channel.send(