尝试在用户说某事时添加警告角色

Trying to add a warning role when a user says something

标题几乎说明了一切,当用户说出包含在 bannedWords 中的内容时,我正在尝试添加角色 'Warning 1' 或 'Warning 2'。我见过人们使用 await bot.add_roles()await add_roles() 但是这两个 return 都是错误的。他们分别给出 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)

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

Message object from on_message 应该在 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))

过去,我是通过在消息的 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 论点,所以我不确定此表单是否会采用该论点,但如果其他表单采用,我认为会。