我的Reddit meme命令不起作用。当我说&meme时,我希望我的机器人用一个模因来回复,但是它不会回复,而是给出一个运行时错误:
/usr/lib/python3.8/asyncio/events.py:81: RuntimeWarning: coroutine 'SubredditHelper.__call__' was never awaited
self._context.run(self._callback, *self._args)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback守则是:
@client.command()
async def meme(ctx):
reddit = asyncpraw.Reddit(client_id = "redditclientid", client_secret = "redditsecret", username = "redditusername", password = "redditpassword", user_agent = "chrome")
subreddit = reddit.subreddit("memes")
all_subs = []
top = subreddit.top(limit = 50)
for submission in top:
all_subs.append(submission)
random_sub = random.choice(all_subs)
name = random_sub.title
url = random_sub.url
em = discord.Embed(title = name)
em.add_field(url = url)
await ctx.send(embed = em)你能帮我找出错误吗?
发布于 2021-05-05 08:01:11
asyncpraw在某些地方需要async和await。
文档展示了async在for-loop中的示例
async for submission in top:
all_subs.append(submission)您还需要在
subreddit = await reddit.subreddit("memes")另一个问题是url= in add_field。它只能使用name=,value=,inline=。见dooc:字段
如果您想显示图像,那么您需要set_image
em.set_image(url=url)使用add_field,您可以使用[Some text](your url)字符串在文本中添加它作为链接
em.add_field(name="My Field", value=f"[Click me]({url})")最终,您可以在Embed中直接在标题中添加链接
em = discord.Embed(title=name, url=url)这里有三个版本的屏幕截图:set_image,add_field和Embed

最低工作代码:
我不使用关于我的帐户的信息,所以我不需要username和password
import os
import discord
from discord.ext import commands
import asyncpraw
import random
TOKEN = os.getenv('DISCORD_TOKEN')
REDDIT_CLIENT_ID = os.getenv('REDDIT_CLIENT_ID')
REDDIT_SECRET = os.getenv('REDDIT_SECRET')
client = commands.Bot(command_prefix="&")
@client.event
async def on_connect():
print("Connected as", client.user.name)
@client.event
async def on_ready():
print("Ready as", client.user.name)
@client.command()
async def meme(ctx):
#searching_msg = await ctx.send("Searching ...")
# https://github.com/reddit-archive/reddit/wiki/API
# https://github.com/reddit-archive/reddit/wiki/OAuth2-Quick-Start-Example#first-steps
# https://asyncpraw.readthedocs.io/en/latest/getting_started/configuration.html#using-an-http-or-https-proxy-with-async-praw
reddit = asyncpraw.Reddit(
client_id=REDDIT_CLIENT_ID,
client_secret=REDDIT_SECRET,
user_agent="linux:pl.furas.blog:v0.1 (by/furas_freeman)",
)
subreddit = await reddit.subreddit("memes") # await
top = subreddit.top(limit=50)
all_subs = [item async for item in top]
#all_subs = []
#async for submission in top: # async
# all_subs.append(submission)
random_sub = random.choice(all_subs)
name = random_sub.title
url = random_sub.url
#await searching_msg.delete() # remove message `Searching ...`
#await ctx.message.delete() # remove user message with `&meme`
# --- display as image ---
em = discord.Embed(title=name)
em.set_image(url=url)
await ctx.send(embed=em)
# --- display as link in text ---
em = discord.Embed(title=name)
em.add_field(name="My Field", value=f"[Click me]({url})")
await ctx.send(embed=em)
# --- display as link in title ---
em = discord.Embed(title=name, url=url)
await ctx.send(embed=em)
# ---
await reddit.close()
client.run(TOKEN)https://stackoverflow.com/questions/67397107
复制相似问题