尝试在用户说某事时添加警告角色
Trying to add a warning role when a user says something
标题几乎说明了一切,当用户说出包含在 bannedWords
中的内容时,我正在尝试添加角色 'Warning 1' 或 'Warning 2'。我见过人们使用 await bot.add_roles()
和 await add_roles()
但是这两个 return 都是错误的。他们分别给出 AttributeError
和 NameError
。我是缺少导入还是有什么地方做错了? 已修复
好的,所以我找到了第一个问题的答案,但现在收到 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
论点,所以我不确定此表单是否会采用该论点,但如果其他表单采用,我认为会。
标题几乎说明了一切,当用户说出包含在 已修复bannedWords
中的内容时,我正在尝试添加角色 'Warning 1' 或 'Warning 2'。我见过人们使用 await bot.add_roles()
和 await add_roles()
但是这两个 return 都是错误的。他们分别给出 AttributeError
和 NameError
。我是缺少导入还是有什么地方做错了?
好的,所以我找到了第一个问题的答案,但现在收到 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
论点,所以我不确定此表单是否会采用该论点,但如果其他表单采用,我认为会。