You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord bot发送Reddit memes报协程未等待错误,该如何修复?

问题解决思路

1. 修复协程未等待的核心报错

你定义的meme是async异步函数,调用异步函数必须加await关键字,否则不会实际执行函数逻辑,只会返回一个协程对象,这就是你收到的报错的直接原因。
原代码中的memes = meme()需要修改为memes = await meme()

2. 修复函数无返回值问题

你当前的meme函数仅执行了打印标题的操作,没有任何返回值,就算修复了调用问题,最后发送的内容也会是None。如果需要发送梗图,需要返回你取到的submission的图片链接。

3. 适配异步运行环境

你用到的praw是同步库,直接放在Discord.py的异步事件循环中调用会阻塞整个Bot的运行,建议替换为异步的Reddit SDK asyncpraw。

修复后参考代码

import discord
import asyncpraw

# 初始化异步Reddit客户端
reddit = asyncpraw.Reddit(
    client_id='#',
    client_secret='#',
    user_agent='Discord bot'
)

async def get_meme():
    subreddit = await reddit.subreddit('memes')
    # 取热榜前10条中未置顶的图片类投稿
    async for submission in subreddit.hot(limit=10):
        if not submission.stickied and submission.post_hint == 'image':
            return submission.url

# 指令触发逻辑请放在Discord.py的on_message事件回调函数内
if message.content.startswith('Plz meme'):
    meme_url = await get_meme()
    if meme_url:
        await message.channel.send(meme_url)
    else:
        await message.channel.send("暂时获取不到梗图,请稍后再试")

额外注意事项

  • 你的原代码里import Discord大小写错误,正确导入语句为import discord,否则会触发导入报错
  • 要确保Reddit客户端的client_id、client_secret参数填写正确,否则会出现权限校验失败的问题
  • 指令判断逻辑必须放在Discord.py的on_message事件回调函数内,不能直接写在全局作用域,否则无法获取到message对象

内容的提问来源于stack exchange,提问作者Abdurrahman A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:54:02