我的 automod 系统在 disocrd.py

时间:2021-06-06 05:41:26

标签: discord.py

所以,我正在尝试创建一个事件,如果有人发送任何邀请链接,我的 BOT 将检测、删除它并使用户静音,并在我的日志频道中发送一个日志,告诉用户尝试发送一个服务器中的邀请链接 到目前为止,这是我的代码:

@bot.event
async def on_message(ctx, message):
    discordInviteFilter = re.compile("(...)?(?:https?://)?discord(?:(?:app)?\.com/invite|\.gg)/?[a-zA-Z0-9]+/?")
    guild = ctx.guild
    embed1=discord.Embed(title="Muted successfully", colour=red)
    embed1.set_thumbnail(url=message.member.avatar_url)
    embed1.add_field(name="Reason", value=f"Send invite link", inline=False)
    mutedRole = discord.utils.get(guild.roles, name="? | Muted")
    channel = discord.utils.get(message.member.guild.channels, name="?║logs")
    if discordInviteFilter.match(message.content):
        await ctx.message.delete()
        await ctx.message.channel.send(f'{ctx.message.author.mention}, invite link are not allowed here. Please read the rules again')
    await bot.process_commands(message)
    await ctx.message.author.add_roles(mutedRole)    
    await channel.send(embed=embed1)

当我运行我的代码并发送邀请链接时,这是我的错误

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\Blue\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
TypeError: on_message() missing 1 required positional argument: 'message'
Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\Blue\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
TypeError: on_message() missing 1 required positional argument: 'message'
Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\Blue\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
TypeError: on_message() missing 1 required positional argument: 'message'

这几行有什么错误吗?我需要你的帮助。非常感谢

2 个答案:

答案 0 :(得分:0)

您为 on_message 事件提供了 2 个参数,该事件只需要一个参数,即 message

删除 ctx 参数并尝试以下代码:

@bot.event
async def on_message(message):
    discordInviteFilter = re.compile("(...)?(?:https?://)?discord(?:(?:app)?\.com/invite|\.gg)/?[a-zA-Z0-9]+/?")
    guild = message.guild
    embed1=discord.Embed(title="Muted successfully")
    embed1.set_thumbnail(url=message.author.avatar_url)
    embed1.add_field(name="Reason", value=f"Send invite link", inline=False)
    mutedRole = discord.utils.get(guild.roles, name="? | Muted")
    channel = discord.utils.get(message.author.guild.channels, name="?║logs")
    if discordInviteFilter.match(message.content):
        await message.delete()
        await message.channel.send(f'{message.author.mention}, invite link are not allowed here. Please read the rules again')
        await bot.process_commands(message)
        await message.author.add_roles(mutedRole)    
        await channel.send(embed=embed1)

答案 1 :(得分:0)

发生这种情况是因为您有不应包含的参数 ctxon_message 应该有一个参数,message

尝试这样的事情:

@bot.event
async def on_message(message: discord.Message):
    discordInviteFilter = re.compile("(...)?(?:https?://)?discord(?:(?:app)?\.com/invite|\.gg)/?[a-zA-Z0-9]+/?")
    guild = message.guild
    embed1=discord.Embed(title="Muted successfully", colour=red)
    embed1.set_thumbnail(url=message.member.avatar_url)
    embed1.add_field(name="Reason", value=f"Send invite link", inline=False)
    mutedRole = discord.utils.get(guild.roles, name="? | Muted")
    channel = discord.utils.get(message.member.guild.channels, name="?║logs")
    if discordInviteFilter.match(message.content):
        await message.delete()
        await message.channel.send(f'{message.author.mention}, invite links are not allowed here. Please read the rules again')
    await bot.process_commands(message)
    await message.author.add_roles(mutedRole)    
    await channel.send(embed=embed1)

Reference

我还建议将您的不和谐邀请过滤器正则表达式编译移动到仅发生一次(在函数之外),并将尽可能多的代码移动到 if 语句中,这样您就不必运行它,除非需要。