Added input sanitazition

This commit is contained in:
unknown 2023-03-16 19:13:37 +01:00
parent c353f552fe
commit c42555a97f

View File

@ -1,10 +1,20 @@
import asyncio import asyncio
from typing import List
import datetime import datetime
import re
from typing import List
import discord import discord
from redbot.core import Config, checks, commands from redbot.core import Config, checks, commands
from redbot.core.utils.antispam import AntiSpam
from redbot.core.bot import Red from redbot.core.bot import Red
from redbot.core.utils.antispam import AntiSpam
def sanitize_input(input_text: str) -> str:
"""Sanitize input to remove mentions, links, and special characters."""
sanitized_text = re.sub(r'<@!?&?(\d+)>', '', input_text)
sanitized_text = re.sub(r'http\S+', '', sanitized_text)
sanitized_text = re.sub(r'([^\w\s.,!?`~@#$%^&*()_+=-])', '', sanitized_text)
return sanitized_text
class Recruitment(commands.Cog): class Recruitment(commands.Cog):
@ -16,7 +26,16 @@ class Recruitment(commands.Cog):
self.config = Config.get_conf(self, identifier=101101101101001110101) # Replace with your own unique identifier self.config = Config.get_conf(self, identifier=101101101101001110101) # Replace with your own unique identifier
default_guild = {"guild_id": 274657393936302080, "application_channel_id": None} default_guild = {"guild_id": 274657393936302080, "application_channel_id": None}
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
self.antispam = {}
async def cog_check(self, ctx: commands.Context):
if ctx.guild.id not in self.antispam:
self.antispam[ctx.guild.id] = AntiSpam(ctx.guild)
if self.antispam[ctx.guild.id].spammy(ctx):
return False
return True
@commands.guild_only() @commands.guild_only()
@checks.admin_or_permissions(manage_guild=True) @checks.admin_or_permissions(manage_guild=True)
@ -37,9 +56,14 @@ class Recruitment(commands.Cog):
await self.config.guild(guild).clear_raw("application_channel_id") await self.config.guild(guild).clear_raw("application_channel_id")
await ctx.send("Application channel cleared.") await ctx.send("Application channel cleared.")
@commands.group(name="application", usage="[text]", invoke_without_command=True) @commands.group(name="application", usage="[text]", invoke_without_command=True)
async def application(self, ctx: commands.Context, *, _application: str = ""): async def application(self, ctx: commands.Context, *, _application: str = ""):
# Input validation and sanitization for _application
_application = sanitize_input(_application)
if len(_application) > 2000:
await ctx.send("Your application is too long. Please limit it to 2000 characters.")
return
guild_id = await self.get_guild_id(ctx) guild_id = await self.get_guild_id(ctx)
guild = discord.utils.get(self.bot.guilds, id=guild_id) guild = discord.utils.get(self.bot.guilds, id=guild_id)
if guild is None: if guild is None: