python - discord.py bot 的随机 subreddit 图像不起作用
问题描述
这是我的代码,当我运行“.memri”命令时它会返回一堆错误。我希望我的不和谐机器人从“memritvmemes”子版块中获得一张随机图片。谁能告诉我我做错了什么?
这是我的代码:
import praw
import random
import os
from discord.ext import commands
client = commands.Bot(command_prefix = '.')
reddit = praw.Reddit(client_id='the client id',
client_secret='the client secret',
user_agent='Memri TV Bot by /u/Hezbolloli')
@client.command()
async def memri(ctx):
memri_submissions = reddit.subreddit('memritvmemes').hot()
post_to_pick = random.randint(1, 10)
for i in range(0, post_to_pick):
submission = next(x for x in memri_submissions if not x.stickied)
await ctx.send(submission.url)
这是我在 python shell 中的错误日志:
Ignoring exception in command memri:
Traceback (most recent call last):
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped
ret = await coro(*args, **kwargs)
File "C:\Users\Win 10\Desktop\app.py", line 69, in memri
submission = next(x for x in memri_submissions if not x.stickied)
File "C:\Users\Win 10\Desktop\app.py", line 69, in <genexpr>
submission = next(x for x in memri_submissions if not x.stickied)
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\praw\models\listing\generator.py", line 61, in __next__
self._next_batch()
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\praw\models\listing\generator.py", line 71, in _next_batch
self._listing = self._reddit.get(self.url, params=self.params)
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\praw\reddit.py", line 454, in get
data = self.request("GET", path, params=params)
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\praw\reddit.py", line 626, in request
return self._core.request(
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\prawcore\sessions.py", line 183, in request
return self._request_with_retries(
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\prawcore\sessions.py", line 115, in _request_with_retries
response, saved_exception = self._make_request(
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\prawcore\sessions.py", line 98, in _make_request
response = self._rate_limiter.call(
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\prawcore\rate_limit.py", line 35, in call
kwargs['headers'] = set_header_callback()
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\prawcore\sessions.py", line 145, in _set_header_callback
self._authorizer.refresh()
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\prawcore\auth.py", line 299, in refresh
self._request_token(grant_type='client_credentials')
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\prawcore\auth.py", line 138, in _request_token
response = self._authenticator._post(url, **data)
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\prawcore\auth.py", line 31, in _post
raise ResponseException(response)
prawcore.exceptions.ResponseException: received 401 HTTP response
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke
await ctx.command.invoke(ctx)
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 797, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "C:\Users\Win 10\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 92, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ResponseException: received 401 HTTP response
解决方案
试试下面的代码片段:
@client.command()
async def memri(ctx):
subreddit = reddit.subreddit("memritvmemes")
all_subs = []
top = subreddit.hot(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.set_image(url=url)
await ctx.send(embed=em)
推荐阅读
- vue.js - 计算属性“用户名”已分配给但它没有设置器
- java - 如何在 JavaFX 中的布局计算期间获取子项的实际大小?
- javascript - Meteor 教程 - 未定义跟踪器
- pandas - 如何展平 MultiIndex 列
- azure - 是否可以在 Azure 上设置一个 mysql 环境,使其保持在 Vs Pro 订阅的 50 美元信用预算范围内?
- apache-kafka - 自定义 UDAF 不起作用(Ksql:Confluent)
- react-native - 我们如何使用 facebook AppEventsLogger 在 react native 中添加到购物车事件
- php - PHP array_push() 获取索引?
- angular - 如何编写单元测试用例以在Angular中使用下拉框列表提交表单?
- android - 片段未全屏