当前位置: 首页 > 知识库问答 >
问题:

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

池永长
2023-03-14

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

因此,我的服务器上有一个名为main channel的频道,我希望这些欢迎消息可以通过bot打印出来。然而,我不知道该怎么做。这是我目前的设置,但不起作用。

我得到的错误是:

忽略异常在on_member_joinTraceback(最近的调用最后):文件"C:\用户\frenc\PycharmProjects\Discord\discord\client.py",第255行,在_run_event等待coro(*args,**kwargs)文件"C:/用户/frenc/PycharmProjects/Discord/prova.py",第18行,on_member_join等待channel.send(Benvenuto nel服务器!)TypeError:不能发送非无值到一个刚刚开始的协程C:\用户\frenc\PycharmProjects\Discord\discord\client.py:262: RuntimeWarning:协程'成员。_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个答案

东方文林
2023-03-14

您看到此错误是因为您没有等待\u get\u 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角色)。

 类似资料:
  • 在解封XML时得到一个UnmarshalException(意外元素),我刚刚通过Marshaller运行了该元素。我看起来像是封送处理生成了XML,而XML无法解封。 以下UnmarshalException是由代码Unmarshaller.Unmarshal(reader)的最后一行引发的: 生成的XML如下所示: 为什么抛出UnmarshalException?

  • 我的问题是,我正在制作一个团结的游戏,我想做的是,当我游戏中的敌人击中障碍物时,它每秒都会造成x次伤害。 “桌面”障碍物上有一个对撞机和健康脚本,以及一个用于移动和攻击敌人的碰撞体和脚本。 敌人在与书桌物体碰撞时停止,并造成伤害!但是,损害是持续的...我试过协程和调用,但所有的结果都是一样的;每次触发探测造成10点伤害,而不是每秒。 以下是脚本: 敌人的运动和攻击: 桌面健康:

  • 我正在使用IBM MQ。几天前,我设法获得了一个基本的握手/Put Message/get Message/Disconnect.NET解决方案,但它只能在本地级别上工作,现在我需要更新该解决方案,以便它也能远程工作。 我已经研究了许多关于这些错误的问题,但是尽管我遵循了大多数建议的解决方案(我确保接收方的侦听器正在运行,我尝试关闭防火墙,我尝试使用不同的端口,我执行Telnet测试,我停止/重新

  • 我已经在tomcat服务器上安装了应用程序。在启动和加载应用程序的过程中,我有以下堆栈跟踪的错误。如何解决这个问题? apache-tomcat-7.0.47/webapps/petclinic 2016年10月27日下午12:14:36 org。阿帕奇。卡塔琳娜。果心标准上下文起始内部 严重:ServletContainerInitializer处理javax时出错。servlet。Servle

  • 尝试通过Intellij IEDA运行Appium服务器时发生以下错误: 错误:无法启动应用程序会话,错误是:错误:命令失败:C:\WINDOWS\system32\cmd。exe/s/c“c:\Android\sdk\platform tools\adb.exe-s emulator-5554安装”c:\Program Files(x86)\Appium\node\u modules\Appiu