added per event channel setting

This commit is contained in:
brandons209 2019-11-06 01:26:29 -05:00
parent a1941c5f92
commit 409ce90bb6

View file

@ -33,13 +33,12 @@ class Welcome(getattr(commands, "Cog", object)):
guild_defaults = { guild_defaults = {
'enabled': False, 'enabled': False,
'channel': None, 'channel': None,
'leave_channel': None,
'ban_channel': None,
'date': None, 'date': None,
'join': { 'join': {
'enabled': True, 'enabled': True,
'delete': False, 'delete': False,
'last': None, 'last': None,
'channel': None,
'counter': 0, 'counter': 0,
'whisper': { 'whisper': {
'state': 'off', 'state': 'off',
@ -51,18 +50,21 @@ class Welcome(getattr(commands, "Cog", object)):
'leave': { 'leave': {
'enabled': True, 'enabled': True,
'delete': False, 'delete': False,
'channel': None,
'last': None, 'last': None,
'messages': [default_leave], 'messages': [default_leave],
}, },
'ban': { 'ban': {
'enabled': True, 'enabled': True,
'delete': False, 'delete': False,
'channel': None,
'last': None, 'last': None,
'messages': [default_ban], 'messages': [default_ban],
}, },
'unban': { 'unban': {
'enabled': True, 'enabled': True,
'delete': False, 'delete': False,
'channel': None,
'last': None, 'last': None,
'messages': [default_unban], 'messages': [default_unban],
} }
@ -85,9 +87,11 @@ class Welcome(getattr(commands, "Cog", object)):
guild = ctx.guild guild = ctx.guild
c = await self.config.guild(guild).all() c = await self.config.guild(guild).all()
channel = await self.__get_channel(ctx.guild, "join") channel = await self.__get_channel(guild, "default")
leave_channel = await self.__get_channel(ctx.guild, "leave") join_channel = await self.__get_channel(guild, "join")
ban_channel = await self.__get_channel(ctx.guild, "ban") leave_channel = await self.__get_channel(guild, "leave")
ban_channel = await self.__get_channel(guild, "ban")
unban_channel = await self.__get_channel(guild, "unban")
j = c['join'] j = c['join']
jw = j['whisper'] jw = j['whisper']
@ -99,34 +103,36 @@ class Welcome(getattr(commands, "Cog", object)):
emb = discord.Embed(color=await ctx.embed_color(), title="Current Welcome Settings") emb = discord.Embed(color=await ctx.embed_color(), title="Current Welcome Settings")
emb.add_field(name="General", value=( emb.add_field(name="General", value=(
"**Enabled:** {}\n" "**Enabled:** {}\n"
"**Channel:** #{}\n" "**Channel:** #{}\n."
"**Leave Channel:** #{}\n" ).format(c['enabled'], channel))
"**Ban/Unban Channel:** #{}\n"
).format(c['enabled'], channel, leave_channel, ban_channel))
emb.add_field(name="Join", value=( emb.add_field(name="Join", value=(
"**Enabled:** {}\n" "**Enabled:** {}\n"
"**Channel:** {}\n"
"**Delete previous:** {}\n" "**Delete previous:** {}\n"
"**Whisper state:** {}\n" "**Whisper state:** {}\n"
"**Whisper message:** {}\n" "**Whisper message:** {}\n"
"**Messages:** {}; do `{prefix}welcomeset join msg list` for a list\n" "**Messages:** {}; do `{prefix}welcomeset join msg list` for a list\n"
"**Bot message:** {}" "**Bot message:** {}"
).format(j['enabled'], j['delete'], jw['state'], jw['message'] if len(jw['message']) <= 50 else jw['message'][:50] + "...", len(j['messages']), j['bot'], ).format(j['enabled'], join_channel, j['delete'], jw['state'], jw['message'] if len(jw['message']) <= 50 else jw['message'][:50] + "...", len(j['messages']), j['bot'],
prefix=ctx.prefix)) prefix=ctx.prefix))
emb.add_field(name="Leave", value=( emb.add_field(name="Leave", value=(
"**Enabled:** {}\n" "**Enabled:** {}\n"
"**Channel:** {}\n"
"**Delete previous:** {}\n" "**Delete previous:** {}\n"
"**Messages:** {}; do `{prefix}welcomeset leave msg list` for a list\n" "**Messages:** {}; do `{prefix}welcomeset leave msg list` for a list\n"
).format(v['enabled'], v['delete'], len(v['messages']), prefix=ctx.prefix)) ).format(v['enabled'], leave_channel, v['delete'], len(v['messages']), prefix=ctx.prefix))
emb.add_field(name="Ban", value=( emb.add_field(name="Ban", value=(
"**Enabled:** {}\n" "**Enabled:** {}\n"
"**Channel:** {}\n"
"**Delete previous:** {}\n" "**Delete previous:** {}\n"
"**Messages:** {}; do `{prefix}welcomeset ban msg list` for a list\n" "**Messages:** {}; do `{prefix}welcomeset ban msg list` for a list\n"
).format(b['enabled'], b['delete'], len(b['messages']), prefix=ctx.prefix)) ).format(b['enabled'], ban_channel, b['delete'], len(b['messages']), prefix=ctx.prefix))
emb.add_field(name="Unban", value=( emb.add_field(name="Unban", value=(
"**Enabled:** {}\n" "**Enabled:** {}\n"
"**Channel:** {}\n"
"**Delete previous:** {}\n" "**Delete previous:** {}\n"
"**Messages:** {}; do `{prefix}welcomeset unban msg list` for a list\n" "**Messages:** {}; do `{prefix}welcomeset unban msg list` for a list\n"
).format(u['enabled'], u['delete'], len(u['messages']), prefix=ctx.prefix)) ).format(u['enabled'], unban_channel, u['delete'], len(u['messages']), prefix=ctx.prefix))
await ctx.send(embed=emb) await ctx.send(embed=emb)
else: else:
@ -135,6 +141,7 @@ class Welcome(getattr(commands, "Cog", object)):
" Channel: {}\n" " Channel: {}\n"
" Join:\n" " Join:\n"
" Enabled: {}\n" " Enabled: {}\n"
" Channel: {}\n"
" Delete previous: {}\n" " Delete previous: {}\n"
" Whisper:\n" " Whisper:\n"
" State: {}\n" " State: {}\n"
@ -143,21 +150,24 @@ class Welcome(getattr(commands, "Cog", object)):
" Bot message: {}\n" " Bot message: {}\n"
" Leave:\n" " Leave:\n"
" Enabled: {}\n" " Enabled: {}\n"
" Channel: {}\n"
" Delete previous: {}\n" " Delete previous: {}\n"
" Messages: {}; do '{prefix}welcomeset leave msg list' for a list\n" " Messages: {}; do '{prefix}welcomeset leave msg list' for a list\n"
" Ban:\n" " Ban:\n"
" Enabled: {}\n" " Enabled: {}\n"
" Channel: {}\n"
" Delete previous: {}\n" " Delete previous: {}\n"
" Messages: {}; do '{prefix}welcomeset ban msg list' for a list\n" " Messages: {}; do '{prefix}welcomeset ban msg list' for a list\n"
" Unban:\n" " Unban:\n"
" Enabled: {}\n" " Enabled: {}\n"
" Channel: {}\n"
" Delete previous: {}\n" " Delete previous: {}\n"
" Messages: {}; do '{prefix}welcomeset unban msg list' for a list\n" " Messages: {}; do '{prefix}welcomeset unban msg list' for a list\n"
"").format(c['enabled'], channel, "").format(c['enabled'], channel,
j['enabled'], j['delete'], jw['state'], jw['message'], len(j['messages']), j['bot'], j['enabled'], join_channel, j['delete'], jw['state'], jw['message'], len(j['messages']), j['bot'],
v['enabled'], v['delete'], len(v['messages']), v['enabled'], leave_channel, v['delete'], len(v['messages']),
b['enabled'], b['delete'], len(b['messages']), b['enabled'], ban_channel, b['delete'], len(b['messages']),
u['enabled'], u['delete'], len(u['messages']), u['enabled'], unban_channel, u['delete'], len(u['messages']),
prefix=ctx.prefix), prefix=ctx.prefix),
"Current Welcome settings:" "Current Welcome settings:"
) )
@ -200,44 +210,6 @@ class Welcome(getattr(commands, "Cog", object)):
"").format(channel) "").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='ban-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') @welcomeset.group(name='join')
async def welcomeset_join(self, ctx: commands.Context): async def welcomeset_join(self, ctx: commands.Context):
"""Change settings for join notices.""" """Change settings for join notices."""
@ -386,6 +358,26 @@ class Welcome(getattr(commands, "Cog", object)):
"") "")
) )
@welcomeset_join.command(name='channel')
async def welcomeset_join_channel(self, ctx: commands.Context, channel: discord.TextChannel):
"""Set channel for join notices
If not set, join notices are sent to the default events channel.
"""
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
await self.config.guild(ctx.guild).join.channel.set(channel.id)
await ctx.send(
("I will now send join event notices to {0.mention}."
"").format(channel)
)
@welcomeset.group(name='leave') @welcomeset.group(name='leave')
async def welcomeset_leave(self, ctx: commands.Context): async def welcomeset_leave(self, ctx: commands.Context):
"""Change settings for leave notices.""" """Change settings for leave notices."""
@ -410,6 +402,26 @@ class Welcome(getattr(commands, "Cog", object)):
await self.__toggledelete(ctx, on_off, 'leave') await self.__toggledelete(ctx, on_off, 'leave')
@welcomeset_leave.command(name='channel')
async def welcomeset_leave_channel(self, ctx: commands.Context, channel: discord.TextChannel):
"""Set channel for leave notices
If not set, leave notices are sent to the default events channel.
"""
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
await self.config.guild(ctx.guild).leave.channel.set(channel.id)
await ctx.send(
("I will now send leave event notices to {0.mention}."
"").format(channel)
)
@welcomeset_leave.group(name='msg') @welcomeset_leave.group(name='msg')
async def welcomeset_leave_msg(self, ctx: commands.Context): async def welcomeset_leave_msg(self, ctx: commands.Context):
"""Manage leave message formats.""" """Manage leave message formats."""
@ -468,6 +480,26 @@ class Welcome(getattr(commands, "Cog", object)):
await self.__toggledelete(ctx, on_off, 'ban') await self.__toggledelete(ctx, on_off, 'ban')
@welcomeset_ban.command(name='channel')
async def welcomeset_ban_channel(self, ctx: commands.Context, channel: discord.TextChannel):
"""Set channel for ban notices
If not set, ban notices are sent to the default events channel.
"""
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
await self.config.guild(ctx.guild).ban.channel.set(channel.id)
await ctx.send(
("I will now send ban event notices to {0.mention}."
"").format(channel)
)
@welcomeset_ban.group(name='msg') @welcomeset_ban.group(name='msg')
async def welcomeset_ban_msg(self, ctx: commands.Context): async def welcomeset_ban_msg(self, ctx: commands.Context):
"""Manage ban message formats.""" """Manage ban message formats."""
@ -526,6 +558,26 @@ class Welcome(getattr(commands, "Cog", object)):
await self.__toggledelete(ctx, on_off, 'unban') await self.__toggledelete(ctx, on_off, 'unban')
@welcomeset_unban.command(name='channel')
async def welcomeset_unban_channel(self, ctx: commands.Context, channel: discord.TextChannel):
"""Set channel for unban notices
If not set, unban notices are sent to the default events channel.
"""
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
await self.config.guild(ctx.guild).unban.channel.set(channel.id)
await ctx.send(
("I will now send unban event notices to {0.mention}."
"").format(channel)
)
@welcomeset_unban.group(name='msg') @welcomeset_unban.group(name='msg')
async def welcomeset_unban_msg(self, ctx: commands.Context): async def welcomeset_unban_msg(self, ctx: commands.Context):
"""Manage unban message formats.""" """Manage unban message formats."""
@ -730,25 +782,34 @@ class Welcome(getattr(commands, "Cog", object)):
"""Gets the best text channel to use for event notices. """Gets the best text channel to use for event notices.
Order of priority: Order of priority:
1. User-defined channel 1. User-defined channel for event
2. Guild's system channel (if bot can speak in it) 2. Cog-defined channel for all events
3. First channel that the bot can speak in 3. Guild's system channel (if bot can speak in it)
4. First channel that the bot can speak in
""" """
channel = None channel = None
if event == 'join': if event == 'join':
channel_id = await self.config.guild(guild).channel() channel_id = await self.config.guild(guild).join.channel()
elif event == 'leave': elif event == 'leave':
channel_id = await self.config.guild(guild).leave_channel() channel_id = await self.config.guild(guild).leave.channel()
elif event == 'ban' or event == 'unban': elif event == 'ban':
channel_id = await self.config.guild(guild).ban_channel() channel_id = await self.config.guild(guild).ban.channel()
elif event == 'unban':
channel_id = await self.config.guild(guild).unban.channel()
elif event == 'default':
channel_id = await self.config.guild(guild).channel()
else: else:
raise TypeError("Wrong event type in __get_channel.") raise TypeError("Wrong event type in __get_channel.")
if channel_id is not None: if channel_id is not None:
channel = guild.get_channel(channel_id) channel = guild.get_channel(channel_id)
if channel is None or not self.__can_speak_in(channel):
channel_id = await self.config.guild(guild).channel()
channel = guild.get_channel(channel_id)
if channel is None or not self.__can_speak_in(channel): if channel is None or not self.__can_speak_in(channel):
channel = guild.system_channel channel = guild.system_channel