mirror of
https://github.com/LBRYFoundation/modmail-channel-control.git
synced 2025-08-23 09:37:30 +00:00
Channel Control plugin
This commit is contained in:
commit
f1ffe7049c
2 changed files with 81 additions and 0 deletions
BIN
channel-control/__pycache__/channel-control.cpython-39.pyc
Normal file
BIN
channel-control/__pycache__/channel-control.cpython-39.pyc
Normal file
Binary file not shown.
81
channel-control/channel-control.py
Normal file
81
channel-control/channel-control.py
Normal file
|
@ -0,0 +1,81 @@
|
|||
import discord
|
||||
from discord.ext import commands
|
||||
|
||||
from core import checks
|
||||
from core.checks import PermissionLevel
|
||||
from core.models import DMDisabled
|
||||
|
||||
|
||||
class ChannelControl(commands.Cog):
|
||||
"""Controls channels and enables/disables new thread creaation based on the number of channels"""
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
self.total_allowed_channels = 500
|
||||
self.db = self.bot.plugin_db.get_partition(self)
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_guild_channel_create(self, channel):
|
||||
if channel.guild != self.bot.modmail_guild:
|
||||
return
|
||||
|
||||
current_channels = len(self.bot.modmail_guild.channels)
|
||||
config = await self.db.find_one({'_id': 'config'}) or {}
|
||||
max_channel_limit = config.get('max_channel_limit') or 100
|
||||
if current_channels / self.total_allowed_channels * 100 > max_channel_limit and self.bot.config["dm_disabled"] < DMDisabled.NEW_THREADS:
|
||||
# disable threads
|
||||
self.bot.config["dm_disabled"] = DMDisabled.NEW_THREADS
|
||||
|
||||
if config.get('disabled_full_response'):
|
||||
self.bot.config["disabled_current_thread_response"] = config['disabled_full_response']
|
||||
|
||||
await self.bot.config.update()
|
||||
em = discord.Embed(
|
||||
title='Channel Control: New threads disabled',
|
||||
description=f'Total Channel Count ({current_channels}) > Min limit ({max_channel_limit}%)',
|
||||
color=self.bot.error_color
|
||||
)
|
||||
await self.bot.log_channel.send(embed=em)
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_guild_channel_delete(self, channel):
|
||||
if channel.guild != self.bot.modmail_guild:
|
||||
return
|
||||
|
||||
current_channels = len(self.bot.modmail_guild.channels)
|
||||
config = await self.db.find_one({'_id': 'config'}) or {}
|
||||
min_channel_limit = config.get('min_channel_limit') or 0
|
||||
if current_channels / self.total_allowed_channels * 100 < min_channel_limit and self.bot.config["dm_disabled"] >= DMDisabled.NEW_THREADS:
|
||||
# disable threads
|
||||
self.bot.config["dm_disabled"] = DMDisabled.NONE
|
||||
|
||||
if config.get('disabled_default_response'):
|
||||
self.bot.config["disabled_current_thread_response"] = config['disabled_default_response']
|
||||
|
||||
await self.bot.config.update()
|
||||
|
||||
em = discord.Embed(
|
||||
title='Channel Control: New threads enabled',
|
||||
description=f'Total Channel Count ({current_channels}) < Min limit ({min_channel_limit}%)',
|
||||
color=self.bot.main_color
|
||||
)
|
||||
await self.bot.log_channel.send(embed=em)
|
||||
|
||||
@checks.has_permissions(PermissionLevel.MODERATOR)
|
||||
@commands.command()
|
||||
async def ccconfig(self, ctx, key: str, value: str=""):
|
||||
"""Valid keys: max_channel_limit, min_channel_limit, disabled_full_response, disabled_default_response
|
||||
All limits should be 0-100 (percent)
|
||||
|
||||
Leave value blank to reset
|
||||
"""
|
||||
if value.isdigit():
|
||||
value = int(value)
|
||||
if key in ('max_channel_limit', 'min_channel_limit', 'disabled_full_response, disabled_default_response'):
|
||||
await self.db.find_one_and_update({'_id': 'config'}, {'$set': {key: value}}, upsert=True)
|
||||
await ctx.send('Success')
|
||||
else:
|
||||
await ctx.send('Invalid key')
|
||||
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(ChannelControl(bot))
|
Loading…
Add table
Reference in a new issue