首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎么做才能让我的discord机器人在请求时发送来自reddit的表情包?

我怎么做才能让我的discord机器人在请求时发送来自reddit的表情包?
EN

Stack Overflow用户
提问于 2021-05-20 17:44:18
回答 1查看 350关注 0票数 0

我的代码很简单,因为我刚开始编写我的不一致机器人,所以我想让它在单词!meme在不一致中发送时,机器人从子subreddit发送一个随机的meme,这是代码:

代码语言:javascript
复制
import discord
import os
import praw
import random

client = discord.Client()


reddit = praw.Reddit(client_id='the client id',
    client_secret='the client secret',
    user_agent='Memri TV Bot by /u/Hezbolloli')

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))



@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
      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)

client.run('Token')

我的错误在这里,我不确定我应该从哪里开始研究这个问题,因为这是我在编程生涯中遇到的最长的错误:

代码语言:javascript
复制
It appears that you are using PRAW in an asynchronous environment.
It is strongly recommended to use Async PRAW: https://asyncpraw.readthedocs.io.
See https://praw.readthedocs.io/en/latest/getting_started/multiple_instances.html#discord-bots-and-asynchronous-environments for more info.

Ignoring exception in on_message
Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "main.py", line 28, in on_message
    for submission in top:
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/praw/models/listing/generator.py", line 63, in __next__
    self._next_batch()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/praw/models/listing/generator.py", line 73, in _next_batch
    self._listing = self._reddit.get(self.url, params=self.params)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/praw/reddit.py", line 566, in get
    return self._objectify_request(method="GET", params=params, path=path)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/praw/reddit.py", line 666, in _objectify_request
    self.request(
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/praw/reddit.py", line 848, in request
    return self._core.request(
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/prawcore/sessions.py", line 324, in request
    return self._request_with_retries(
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/prawcore/sessions.py", line 222, in _request_with_retries
    response, saved_exception = self._make_request(
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/prawcore/sessions.py", line 179, in _make_request
    response = self._rate_limiter.call(
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/prawcore/rate_limit.py", line 33, in call
    kwargs["headers"] = set_header_callback()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/prawcore/sessions.py", line 277, in _set_header_callback
    self._authorizer.refresh()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/prawcore/auth.py", line 346, in refresh
    self._request_token(grant_type="client_credentials")
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/prawcore/auth.py", line 155, in _request_token
    response = self._authenticator._post(url, **data)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/prawcore/auth.py", line 38, in _post
    raise ResponseException(response)
prawcore.exceptions.ResponseException: received 401 HTTP response
EN

回答 1

Stack Overflow用户

发布于 2021-05-21 18:06:35

问题似乎出在你对Reddit的请求上。当您在异步环境中工作时,您需要改用asyncpraw模块(文档:Asyncpraw for reddit docs)。代码几乎是一样的:

代码语言:javascript
复制
import discord
import os
import asyncpraw # install it using "pip install asyncpraw" 
import random

client = discord.Client()


reddit = asyncpraw.Reddit(client_id='the client id',
    client_secret='the client secret',
    user_agent='Memri TV Bot by /u/Hezbolloli')

而且,您也没有定义ctx。试试:message.channel.send(...),或者设置一个机器人。

如果您正在编写bot,我强烈建议您使用discord bot命令作为添加功能的一种方式,而不是读取消息内容(您也可以使用斜杠命令)。这里有一个文档的链接:https://discordpy.readthedocs.io/en/stable/#getting-started在线上有相当多关于它的信息。如果你遇到麻烦,我很乐意帮助你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67617908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档