【问题标题】:My Discord bot returns an error when I want it to send reddit memes. How do I fix this?当我希望我的 Discord 机器人发送 reddit 模因时,它会返回错误。我该如何解决?
【发布时间】:2021-11-23 13:21:57
【问题描述】:

我为 Discord 机器人编写了一个代码,这样它就可以从 meme sub reddit 发送 meme,但每当我尝试它时,它都不起作用。代码如下:

 import Discord
 import praw
 reddit = praw.Reddit(client_id='#',
                 client_secret='#',
                 user_agent='Discord bot')
 async def meme():
     for submission in reddit.subreddit('memes').hot():
         print(submission.title)
 if message.content.startswith('Plz meme'):
     memes = meme()
     await message.channel.send(memes)

我得到的错误是“RuntimeWarning: coroutine 'meme' is never awaited 等待 coro(*args, **kwargs) RuntimeWarning: E​​nable tracemalloc 获取对象分配回溯"

任何帮助将不胜感激

【问题讨论】:

  • 嗯,您是否尝试将coroutine was never awaited 放入搜索引擎?然后发生了什么?
  • 为什么meme首先是协程?它从来没有awaits 任何东西。你觉得def前面的async关键字是什么意思?
  • 您可能不应该在帖子中添加client_secret
  • @AbdurrahmanA 我建议您尽快更改您的客户 ID 和密码,因为您现在已经将它们发布给全世界。

标签: python discord reddit praw


【解决方案1】:

嗯,你从来没有把你的异步函数 meme 变成 await。这个问题有两个简单的解决方法,要么将第 6 行的 async def meme(): 替换为 def meme(),要么在第 10 行调用函数 meme() 之前添加 await

import Discord
import praw
reddit = praw.Reddit(client_id='',
                 client_secret='',
                 user_agent='')
async def meme():
    for submission in reddit.subreddit('memes').hot():
        print(submission.title)
if message.content.startswith('Plz meme'):
    memes = await meme()
    await message.channel.send(memes)

另一个建议是使用 apraw 而不是 praw 与不和谐机器人。

import apraw

reddit = apraw.Reddit(client_id="",
                      client_secret="",
                      username="",
                      password="",
                      user_agent=""
)

async def get_meme():

    subreddit = await reddit.subreddit("memes")

    meme_lst = []
    async for subm in subreddit.hot(limit=500):
        meme_lst.append(subm)

    return meme_lst

@bot.command()
async def meme(self, ctx):

    meme_lst = await get_meme()

    rand = random.choice(meme_lst)

    em = discord.Embed(title=rand.title)
    em.set_image(url=rand.url)

    await ctx.send(embed=em)

参考资料: apraw

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 2021-10-05
    • 2021-09-28
    • 1970-01-01
    • 2021-08-09
    • 2021-05-21
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多