我正在尝试添加on_member_join()方法,以便在有人加入时使用我自己的自定义消息通知我。
所以我的服务器上有一个名为主通道的通道,我希望机器人可以打印这些欢迎消息。但是,我不知道该怎么做。这是我目前的设置,但它不起作用。
我得到的错误是:
忽略on_member_join Traceback中的异常(最近一次调用最后一次):文件“C:\ Users \ frenc \ PycharmProjects \ Discord \ discord \ client.py”,第255行,在_run_event中等待coro(* args,** kwargs)文件“C :/Users/frenc/PycharmProjects/Discord/prova.py“,第18行,在on_member_join中等待channel.send(”Benvenuto nel Server!“)TypeError:无法向刚启动的协同程序C发送非None值: \ Users \ frenc \ PycharmProjects \ Discord \ discord \ client.py:262:RuntimeWarning:coroutine'Fartle._get_channel'从未等待过
我真的不知道如何让我的机器人将这些消息打印到我服务器上的特定频道。
我使用最新版本的discord和Python 3.6。
import discord
client = discord.Client()
@client.event
async def on_ready():
print('logged in as')
print(client.user.name)
print(client.user.id)
print('-----')
@client.event
async def on_member_join(member):
print("Recognised that a member called " + member.name + " joined")
channel = member._get_channel()
await channel.send("Welcome to the server!")
print("Sent message to " + member.name)
role = discord.utils.get(member.server.roles, name="@everyone")
await member.add_roles(member, role)
print("Added role '" + role.name + "' to " + member.name)
client.run(myToken)
你看到这个错误,因为你没有等待_get_channel
。协程/生成器有一个send
方法,与send
对象的Messageable
方法无关。
你不应该使用那个协程,因为Member
对象本身是可以消息的:
@client.event
async def on_member_join(member):
print("Recognised that a member called " + member.name + " joined")
await member.send("Welcome to the server!")
print("Sent message to " + member.name)
# Probably unnecessary
role = discord.utils.get(member.server.roles, name="@everyone")
await member.add_roles(member, role)
print("Added role '" + role.name + "' to " + member.name)
如果@everyone
应该是默认角色,你不需要将它添加到成员,他们会自动获得它(关键是每个人都有everyone
角色)。