GraiaProject / Application

一个设计精巧, 协议实现完备的, 基于 mirai-api-http 的即时聊天软件自动化框架.
https://graia-document.vercel.app/
GNU Affero General Public License v3.0
438 stars 63 forks source link

利用定时任务发送本地图片报错 #39

Closed fmd12345 closed 4 years ago

fmd12345 commented 4 years ago

描述你遇到的问题: 我利用loop.create_task创建一个定时任务用来发送图片,但是会报错 exception=LookupError(<ContextVar name='application' at 0x03A23338>)>

复现步骤: 该 BUG 会在进行以下操作后出现:

  1. loop.create_task 创建一个定时任务
  2. 开始执行发送图片await app.sendGroupMessage(group,MessageChain.create([Image.fromLocalFile('1.jpg')])) 命令时

发生错误的代码

app = GraiaMiraiApplication(..)
async def reminder():
    while True:
        await asyncio.sleep(1)
        if is_time():
            await app.sendGroupMessage(group,MessageChain.create([Image.fromLocalFile('1.jpg')]))
loop.create_task(reminder())
app.launch_blocking()

控制台日志输出截图:

image 用的是miraiOK,没看到 mirai-console有什么输出

运行环境:

额外信息:

试了下发送文字消息是没问题的,不知道为什么发送图片时报错了,是我用法有问题吗?

GreyElaina commented 4 years ago

在上下文外发送消息...

使用这个:

from graia.application.context import enter_context

with enter_context(app=app): # 这里参数名我忘了, 你自己看看:
    await send.......
fmd12345 commented 4 years ago

好的,非常感谢,我太菜了……