Compare commits
	
		
			1 Commits
		
	
	
		
			master
			...
			flag_devel
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | af10493e81 | 
							
								
								
									
										51
									
								
								flag/flag.py
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								flag/flag.py
									
									
									
									
									
								
							| @ -1,13 +1,17 @@ | |||||||
|  | import logging | ||||||
| from datetime import date, timedelta | from datetime import date, timedelta | ||||||
| from typing import Literal | from typing import Literal, Optional | ||||||
| 
 | 
 | ||||||
| import discord | import discord | ||||||
|  | from redbot.cogs.mutes import Mutes | ||||||
| from redbot.core import Config, checks, commands | from redbot.core import Config, checks, commands | ||||||
| from redbot.core.bot import Red | from redbot.core.bot import Red | ||||||
| from redbot.core.commands import Cog | from redbot.core.commands import Cog | ||||||
| from redbot.core.utils import AsyncIter | from redbot.core.utils import AsyncIter | ||||||
| from redbot.core.utils.chat_formatting import pagify | from redbot.core.utils.chat_formatting import pagify | ||||||
| 
 | 
 | ||||||
|  | log = logging.getLogger("red.fox_v3.flag") | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class Flag(Cog): | class Flag(Cog): | ||||||
|     """ |     """ | ||||||
| @ -19,7 +23,7 @@ class Flag(Cog): | |||||||
|         self.bot = bot |         self.bot = bot | ||||||
|         self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True) |         self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True) | ||||||
|         default_global = {} |         default_global = {} | ||||||
|         default_guild = {"days": 31, "dm": True, "flags": {}} |         default_guild = {"days": 31, "dm": True, "flags": {}, "mutethreshold": 0} | ||||||
| 
 | 
 | ||||||
|         self.config.register_global(**default_global) |         self.config.register_global(**default_global) | ||||||
|         self.config.register_guild(**default_guild) |         self.config.register_guild(**default_guild) | ||||||
| @ -78,6 +82,29 @@ class Flag(Cog): | |||||||
|             "DM-ing members when they get a flag is now set to **{}**".format(not dm) |             "DM-ing members when they get a flag is now set to **{}**".format(not dm) | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|  |     @checks.admin_or_permissions(manage_guild=True) | ||||||
|  |     @flagset.command(name="mute") | ||||||
|  |     async def flagset_mute(self, ctx: commands.Context, count: int): | ||||||
|  |         """ | ||||||
|  |         Sets the threshold for flags to mute the user. | ||||||
|  | 
 | ||||||
|  |         Only works when the core mute cog is configured properly. | ||||||
|  | 
 | ||||||
|  |         Set to zero to disable. | ||||||
|  |         """ | ||||||
|  |         if count < 0: | ||||||
|  |             await ctx.send_help() | ||||||
|  |             return | ||||||
|  | 
 | ||||||
|  |         await self.config.guild(ctx.guild).mutethreshold.set(count) | ||||||
|  | 
 | ||||||
|  |         if count: | ||||||
|  |             await ctx.maybe_send_embed( | ||||||
|  |                 "Will now attempt to mute people after **{}** flags".format(count) | ||||||
|  |             ) | ||||||
|  |         else: | ||||||
|  |             await ctx.maybe_send_embed("Muting disabled.") | ||||||
|  | 
 | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def _flag_template(): |     def _flag_template(): | ||||||
|         return {"reason": "", "expireyear": 0, "expiremonth": 0, "expireday": 0} |         return {"reason": "", "expireyear": 0, "expiremonth": 0, "expireday": 0} | ||||||
| @ -91,7 +118,8 @@ class Flag(Cog): | |||||||
|         await self._check_flags(guild) |         await self._check_flags(guild) | ||||||
| 
 | 
 | ||||||
|         flag = self._flag_template() |         flag = self._flag_template() | ||||||
|         expire_date = date.today() + timedelta(days=await self.config.guild(guild).days()) |         mute_days = await self.config.guild(guild).days() | ||||||
|  |         expire_date = date.today() + timedelta(mute_days) | ||||||
| 
 | 
 | ||||||
|         flag["reason"] = reason |         flag["reason"] = reason | ||||||
|         flag["expireyear"] = expire_date.year |         flag["expireyear"] = expire_date.year | ||||||
| @ -106,6 +134,12 @@ class Flag(Cog): | |||||||
|             if str(member.id) not in flags: |             if str(member.id) not in flags: | ||||||
|                 flags[str(member.id)] = [] |                 flags[str(member.id)] = [] | ||||||
|             flags[str(member.id)].append(flag) |             flags[str(member.id)].append(flag) | ||||||
|  |             flag_count = len(flags[str(member.id)]) | ||||||
|  | 
 | ||||||
|  |         mute_threshold = await self.config.guild(guild).mutethreshold() | ||||||
|  |         if 0 < mute_threshold <= flag_count: | ||||||
|  |             able_to_mute = await self._attempt_mute(ctx, member, mute_days) | ||||||
|  |             log.debug(f"Mute attempt: {able_to_mute}") | ||||||
| 
 | 
 | ||||||
|         outembed = await self._list_flags(member) |         outembed = await self._list_flags(member) | ||||||
| 
 | 
 | ||||||
| @ -166,6 +200,17 @@ class Flag(Cog): | |||||||
|         for page in pagify(out): |         for page in pagify(out): | ||||||
|             await ctx.send(page) |             await ctx.send(page) | ||||||
| 
 | 
 | ||||||
|  |     async def _attempt_mute(self, ctx, member: discord.Member, days): | ||||||
|  |         mutes: Optional[Mutes] = self.bot.get_cog("Mutes") | ||||||
|  |         if mutes is None: | ||||||
|  |             log.info("Mutes cog not loaded, cannot mute") | ||||||
|  |             return False | ||||||
|  | 
 | ||||||
|  |         return await mutes.mute(ctx, member, f'{days} days [Flag] Exceeded mute threshold') | ||||||
|  |         # return await mutes.mute_user( | ||||||
|  |         #     member.guild, author, member, until, "[Flag] Exceeded mute threshold" | ||||||
|  |         # ) | ||||||
|  | 
 | ||||||
|     async def _list_flags(self, member: discord.Member): |     async def _list_flags(self, member: discord.Member): | ||||||
|         """Returns a pretty embed of flags on a member""" |         """Returns a pretty embed of flags on a member""" | ||||||
|         flags = await self.config.guild(member.guild).flags.get_raw(str(member.id), default=[]) |         flags = await self.config.guild(member.guild).flags.get_raw(str(member.id), default=[]) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user