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

问题描述 投票:0回答:1

我正在尝试添加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)
python discord.py
1个回答
1
投票

你看到这个错误,因为你没有等待_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角色)。

© www.soinside.com 2019 - 2024. All rights reserved.