Дискорд бот для отправки случайного изображения из выбранного файла - PullRequest
0 голосов
/ 04 мая 2020

Я создаю диск-бот, который случайным образом выбирает изображение (images), которое находится в том же каталоге (Cats), что и файл python (cats.py). Вот как выглядит мой код прямо сейчас:

Cats = os.path.join(os.path.dirname(__file__), "/images")

@client.command()
async def cat(ctx, **kwargs):
    await ctx.send(choice(Cats))

Я не получаю никаких ошибок. Бот выходит в сеть, и когда я пингую его с помощью ~ cat, он выплевывает случайные буквы. Я знаю, что моя проблема связана с asyn c (возможно, kwargs) и строкой ожидания, но я не могу точно определить, в чем проблема. Я новичок в программировании ботов в Python, поэтому может быть глупой ошибкой, что я упускаю из виду, поэтому любая инициатива будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Некоторые элементы, относящиеся к вашему коду.

  1. Cats = os.path.join(os.path.dirname(__file__), "/images"), возвращает просто "/ images", что, вероятно, не будет работать, потому что начало sla sh "/" указывает абсолютный путь и Ваш желаемый каталог вряд ли на root. Если вы хотите использовать абсолютный путь, вам нужно использовать - Cats = os.path.join(os.path.dirname(__file__), "images/") - с sla sh после go перед именем файла. Конечно, вы можете легко использовать относительный путь «images /», так как изображения в той же папке, что и скрипт.
  2. await ctx.send(choice(Cats)) - «choice (Cats)» - это просто строка, и выбор вернет случайное письмо из этой строки. Вам нужно получить изображения / картинки из каталога, чтобы сделать выбор. Вы можете создать список изображений с чем-то вроде - cat_list = [Cats + c for c in listdir(Cats)] (нужно from os import listdir, path)
  3. Вам необходимо использовать Файл , чтобы отправить изображение в сообщении. (нужно from discord import File)
  4. Не уверен, что вы делаете с **kwargs, поэтому исключите его из этого решения.

Попробуйте:

Cats = path.join(path.dirname(__file__), "images/")
# Cats = "images/" - to just use the relative path
cat_list = [Cats + c for c in listdir(Cats)]


@bot.command()
async def cat(ctx):
    await ctx.send(file=File((choice(cat_list))))

Результат:

enter image description here

0 голосов
/ 04 мая 2020

Если вы отправляете его напрямую, вызывая send прямо на канале, вы, скорее всего, отправляете необработанный текст файла, а не загружаете его как изображение.

Из документации вы должны делать это:

Cats = os.path.join(os.path.dirname(__file__), "/images")

@client.command()
async def cat(ctx, **kwargs):
    await ctx.send(file=discord.File(choice(Cats)))

Обратите внимание, что Cats имеет строку, то есть путь к файлу.

...