|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+import weakref
|
|
|
2
|
+
|
|
|
3
|
+from discord import Guild, Member
|
|
|
4
|
+from discord.ext import commands
|
|
|
5
|
+
|
|
|
6
|
+from config import CONFIG
|
|
|
7
|
+from rocketbot.cogs.basecog import BaseCog, BotMessage, BotMessageReaction, CogSetting
|
|
|
8
|
+
|
|
|
9
|
+class AutoKickCog(BaseCog, name='Auto Kick'):
|
|
|
10
|
+ """
|
|
|
11
|
+ Cog for automatically kicking ALL new joins. For temporary use during join raids.
|
|
|
12
|
+ """
|
|
|
13
|
+ SETTING_ENABLED = CogSetting('enabled', bool,
|
|
|
14
|
+ brief='autokick',
|
|
|
15
|
+ description='Whether this cog is enabled for a guild.')
|
|
|
16
|
+
|
|
|
17
|
+ def __init__(self, bot):
|
|
|
18
|
+ super().__init__(bot)
|
|
|
19
|
+ self.add_setting(AutoKickCog.SETTING_ENABLED)
|
|
|
20
|
+
|
|
|
21
|
+ @commands.group(
|
|
|
22
|
+ brief='Automatically kicks all new users as soon as they join',
|
|
|
23
|
+ )
|
|
|
24
|
+ @commands.has_permissions(ban_members=True)
|
|
|
25
|
+ @commands.guild_only()
|
|
|
26
|
+ async def autokick(self, context: commands.Context):
|
|
|
27
|
+ 'Auto-kick'
|
|
|
28
|
+ if context.invoked_subcommand is None:
|
|
|
29
|
+ await context.send_help()
|
|
|
30
|
+
|
|
|
31
|
+ @commands.Cog.listener()
|
|
|
32
|
+ async def on_member_join(self, member: Member) -> None:
|
|
|
33
|
+ 'Event handler'
|
|
|
34
|
+ guild: Guild = member.guild
|
|
|
35
|
+ if not self.get_guild_setting(guild, self.SETTING_ENABLED):
|
|
|
36
|
+ return
|
|
|
37
|
+ await member.kick(reason=f'Rocketbot: Autokick enabled.')
|
|
|
38
|
+ msg = BotMessage(guild,
|
|
|
39
|
+ text=f'Autokicked {member.mention} ({member.id}). To disable this feature: `{CONFIG["command_prefix"]}autokick disable`.',
|
|
|
40
|
+ type=BotMessage.TYPE_INFO,
|
|
|
41
|
+ context=None)
|
|
|
42
|
+ await self.post_message(msg)
|
|
|
43
|
+ self.log(guild, f'Autokicked {member.nick}')
|