Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous discord bot同步返回异步函数值_Asynchronous_Attributes_Python 3.6_Discord - Fatal编程技术网

Asynchronous discord bot同步返回异步函数值

Asynchronous discord bot同步返回异步函数值,asynchronous,attributes,python-3.6,discord,Asynchronous,Attributes,Python 3.6,Discord,我试着不去问这个问题,所以我试了两天来解决这个问题:(我不能,我来了 我只是想访问异步函数外部的“信号”列表,以便稍后在我的同步代码中使用它 这是discord包装器'discord.py'中的异步函数 它读取特定频道上的消息。我的目标是从每个消息内容中获取一些列表 import asyncio from syncer import sync import discord import os import time from discord.ext import commands class

我试着不去问这个问题,所以我试了两天来解决这个问题:(我不能,我来了 我只是想访问异步函数外部的“信号”列表,以便稍后在我的同步代码中使用它

这是discord包装器'discord.py'中的异步函数 它读取特定频道上的消息。我的目标是从每个消息内容中获取一些列表

import asyncio
from syncer import sync
import discord
import os
import time
from discord.ext import commands

class A:

    TOKEN = "XXXXXXXXX"
    client = commands.Bot(command_prefix = ".")


    @client.event
    async def on_message(message):
        autor = message.author
        content = message.content
        channel = message.channel.id
        while ( channel == 'XXXXXXXXXXXXXX' ):
            if #some filters 
                Signal =[message.content]

                return Signal #'till here the code functions and i get the list' 

 bot =A()
 tasks = asyncio.ensure_future(bot.on_message())
 loop =asyncio.get_event_loop()
 loop.run_until_complete(asyncio.gather(*tasks))

 bot.client.run(bot.TOKEN)
这是我正在尝试获取信号列表:

bot =A()
tasks = asyncio.ensure_future(bot.on_message()) 
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*tasks))
bot.client.run(bot.TOKEN)
循环。运行_直到_完成(asyncio.gather(*任务)) AssertionError:future没有使用收益率

我尝试使用名为Syncer的异步到同步包装器:

bot =A()
b = sync(bot.on_message(message))
assert  Signal ==b()
b=同步(bot.on_消息(消息)) NameError:未定义名称“消息” 未关闭的客户端会话 客户端会话:

当我定义消息时:

message = {}
bot =A()
b = sync(bot.on_message(message))
assert  Signal ==b()
TypeError:on_message()接受1个位置参数,但给出了2个 未关闭的客户端会话 客户端会话:

我再次为这个愚蠢的问题感到抱歉,我知道我可能做错了 我正在努力学习
谢谢

这并不是它真正的工作方式。当你在消息上定义一个
事件时,每次bot看到消息时都会调用该协同程序。你仍然可以手动调用它,但你必须向它传递一个
消息
对象。一旦你有了它,你想对该
信号
对象做什么?我正在写g一种代码,每当频道上发布新消息时,它将根据消息的内容进行操作。信号基本上是一个包含3个字符串的列表,因此代码的其余部分将执行“如果信号[0]=”某事“执行某事您可能应该将该功能放在它自己的函数(或协同程序)中谢谢@PatrickHaugh我考虑过这个问题,但这似乎是一个简单的方法,因为剩下的代码很长,这应该只是运行它的触发器如果这有意义的话,我想让它看起来更好
b = sync(bot.on_message(message))