TypeError:无法将非无值发送到刚刚启动的协程

时间:2019-04-15 19:29:46

标签: python discord.py

我正在尝试添加on_member_join()方法,以便有人加入时可以使用自己的自定义消息来通知我。

所以我的服务器上有一个名为main-channel的通道,我希望在该通道中由机器人打印这些欢迎消息。但是,我不确定该怎么做。 目前这是我的设置,但不起作用。

我得到的错误是:

  

忽略on_member_join中的异常     追溯(最近一次通话):     _run_event中的文件“ C:\ Users \ frenc \ PycharmProjects \ Discord \ discord \ client.py”,第255行       等待科罗(* args,** kwargs)     on_member_join中的文件“ C:/Users/frenc/PycharmProjects/Discord/prova.py”,第18行       等待channel.send(“ Benvenuto nel Server!”)   TypeError:无法将非None值发送到刚刚启动的协程   C:\ Users \ frenc \ PycharmProjects \ Discord \ discord \ client.py:262:RuntimeWarning:协程'Member._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)

1 个答案:

答案 0 :(得分:0)

您看到此错误,因为您没有等待_get_channel。协程/生成器具有send方法,与Messageable对象的send方法无关。

无论如何,您都不应使用该协程,因为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角色)。