mirror of
https://github.com/brandons209/Red-bot-Cogs.git
synced 2024-05-19 20:03:17 +12:00
added seperate channels for leave and ban events
This commit is contained in:
parent
ceecffa25e
commit
564a96b68d
|
@ -51,3 +51,4 @@ turn
|
|||
cah
|
||||
pupper
|
||||
pingtime
|
||||
quotetools
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in a new issue