Дискорд Бот не отвечает на команду
Я хотел сделать бота для Дискорд, который отправляет рандомную картинку с определённого сабреддита(в данном случае с r/memes), но при вводе команды - тишина
Код:
import praw
import random
from discord.ext import commands
TOKEN = "token :)"
bot = commands.Bot(description="test", command_prefix="$")
bot.remove_command( 'help' )
reddit = praw.Reddit(client_id='ID :)',
client_secret='Secret :)',
user_agent='MyBot')
@bot.command()
async def meme():
memes_submissions = reddit.subreddit('memes').hot()
post_to_pick = random.randint(1, 10)
for i in range(0, post_to_pick):
submission = next(x for x in memes_submissions if not x.stickied)
await bot.say(submission.url)
bot.run(TOKEN)
Терминал выводит при эту ошибку после отправки команды на сервере:
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users\HOME\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 690, in _parse_arguments
next(iterator)
StopIteration
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\HOME\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users\HOME\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 979, in on_message
await self.process_commands(message)
File "C:\Users\HOME\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 976, in process_commands
await self.invoke(ctx)
File "C:\Users\HOME\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "C:\Users\HOME\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 855, in invoke
await self.prepare(ctx)
File "C:\Users\HOME\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 789, in prepare
await self._parse_arguments(ctx)
File "C:\Users\HOME\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 693, in _parse_arguments
raise discord.ClientException(fmt.format(self))
discord.errors.ClientException: Callback for meme command is missing "ctx" parameter.
Я не понимаю с чем это связано. Я - новичок в Python
Ответы (1 шт):
Интерпретатор сообщает вам, что у функции meme() упущен аргумент ctx.
ctx - Контекст выполнения команды, содержащий информацию о сервере, пользователе и другую информацию
Этот аргумент в вашу функцию передает discord, при вызове команды, однако ваша функция не принимает аргументов.
Чтобы не возникало ошибки, достаточно просто добавить в функцию принятие аргумента:
async def meme(ctx):
Ну и насколько мне известно, у объекта commands.Bot нет функции say(). Если вы хотите отправить сообщение, в канал, где была вызвана команда, то можете как раз таки воспользоваться контекстом:
await ctx.send(submission.url)