【问题标题】:Trying to add a warning role when a user says something当用户说话时尝试添加警告角色
【发布时间】:2021-01-01 11:19:51
【问题描述】:

标题几乎说明了一切,当用户说出bannedWords 中包含的内容时,我正在尝试添加角色“警告 1”或“警告 2”。我见过人们使用await bot.add_roles()await add_roles(),但两者都返回错误。他们分别给出AttributeErrorNameError。我错过了导入还是我做错了什么?已修复

好的,所以我找到了第一个问题的答案,但现在收到 discord.errors.NotFound: 404 Not Found (error code: 10011): Unknown Role 错误。

Discord 在使用 await message.author.add_roles(message.author,role,reason='Reason: Used \'%s\' in \'%s\ , on %s/%s/%s (day,month,year) at %s' % (word, str(message.channel),day,month,year,time)) 时尝试添加角色 message.author 删除第二个 message.author 解决了这个问题,所以应该是:

await message.author.add_roles(role,reason='Reason: Used \'%s\' in \'%s\ , on %s/%s/%s (day,month,year) at %s' % (word, str(message.channel),day,month,year,time))

属性错误:

Traceback (most recent call last):
  File "C:\Users\Me\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\Me\Desktop\Productive\Programming Projects\Python 3\Other\MyBot\bot.py", line 41, in on_message
    await bot.add_roles(message.author,role,reason='Reason: Used \'%s\' in \'%s\ , on %s/%s/%s (day,month,year) at %s' % (word, str(message.channel),day,month,year,time))
AttributeError: 'Client' object has no attribute 'add_roles'

名称错误:

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\Me\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\Me\Desktop\Productive\Programming Projects\Python 3\Other\MyBot\bot.py", line 41, in on_message
    await add_roles(message.author,role,reason='Reason: Used \'%s\' in \'%s\ , on %s/%s/%s (day,month,year) at %s' % (word, str(message.channel),day,month,year,time))
NameError: name 'add_roles' is not defined

所有相关代码

import discord;from discord.utils import get
from datetime import datetime
bot=discord.Client()

@bot.event
async def on_ready():
    print('Logged in')
    print('Username: %s' % (bot.user.name))
    print('Userid: %s' % (bot.user.id))

@bot.event
async def on_message(message):
    if message.author.id == bot.user.id:
        return
    # delete messages with banned words
    bannedWords=['chink','dyke','fag','ook','molest','nig','rape','retard','spic','zipperhead','tranny']
    if str(message.channel)!='no-rules-lol':
        for word in bannedWords:
            if word in message.content.lower():
                await message.channel.send('{0.author.mention}, you have used a word that is black-listed please read <#754763230169006210> to get a full list of black-listed words'.format(message))
                await message.delete()

                #guild=bot.get_guild(id=754064902611796008)
                #role=discord.utils.get(guild.roles,name='Warning 1')
                #member=guild.get_member(message.author.id)
                # get the time the warning was applied.
                currentTime,_=str(datetime.now()).split('.')
                date,time=currentTime.split(' ')
                year,month,day=date.split('-')
                print('message = ' + str(message))
                role=get(message.guild.roles,name="Warning 1")
                await message.author.add_roles(message.author,role,reason='Reason: Used \'%s\' in \'%s\ , on %s/%s/%s (day,month,year) at %s' % (word, str(message.channel),day,month,year,time))

bot.run(Token)

【问题讨论】:

    标签: python discord python-3.6 discord.py-rewrite


    【解决方案1】:

    过去,我通过在消息的author 上调用add_roles 来完成此操作。在你的情况下,它会是这样的:

    await message.author.add_roles(role,reason='Reason: Used \'%s\' in \'%s\ , on %s/%s/%s (day,month,year) at %s' % (word, str(message.channel),day,month,year,time)
    

    我认为我没有包含 reason 参数,所以我不确定此表单是否会接受该参数,但如果其他表单包含,我会认为它会。

    【讨论】:

    • 它应该与 reason 一起使用,但我现在收到了 discord.errors.NotFound: 404 Not Found (error code: 10011): Unknown Role 错误。
    • 您的 utils.get 没有返回角色,请确保您有一个名为 Warning 1 的角色,但我建议使用角色 ID 而不是名称。
    • 我最终找到了问题的原因(我在 add_roles() 中有 message.author,因此它试图将消息的作者添加为角色,我使用的是名称而不是id 所以我可以在我的测试服务器和我使用的实际服务器上使用它。
    【解决方案2】:

    add_roles 是一个成员对象方法:https://discordpy.readthedocs.io/en/latest/api.html?highlight=add_roles#discord.Member.add_roles

    来自on_messageMessage 对象应该在message.author 中包含一个Member 对象,所以你可以这样做:

    await message.author.add_roles(role, reason='Reason: Used \'%s\' in \'%s\ , on %s/%s/%s (day,month,year) at %s' % (word, str(message.channel),day,month,year,time))
    

    【讨论】:

    • 是的,在发布后不久我尝试了 message.author 并且效果很好,但现在我收到了 discord.errors.NotFound: 404 Not Found (error code: 10011): Unknown Role 错误
    • 确保您有一个名为 Warning 1 的角色,但我建议使用角色 ID 而不是名称。
    猜你喜欢
    • 2017-09-25
    • 2018-12-13
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多