Отправка встраиваемых файлов через discord.py - PullRequest
0 голосов
/ 16 февраля 2020

Я заранее прошу прощения, если этот вопрос заставляет вас съеживаться:)

Я проделал большую работу по созданию ботов разногласий с разногласиями api через javascript с разногласиями. js.

Я пытаюсь создать моего первого бот-диска Discord с python, используя API-интерфейс discord через discord.py и с запросами через request.py.

Моя цель - проверить код статуса на сайте, и когда отправляется сообщение, содержащее «код состояния», оно отвечает кодом состояния сайта в виде вложения.

Вот мой код для этого:

import discord
import requests
r = requests.get('redactedurl')
test = r.status_code
class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))

    async def on_message(self, message):
        if (message.channel.id == redacted):
                if "status code" in message.content:
                    print('Message from {0.author}: {0.content}'.format(message))

                    embed = discord.Embed(color=0x00ff00)
                    embed.title = "test" 
                    embed.description = '**Status Code:** {r.status_code}'
                    await message.channel.send(embed=embed)


client = MyClient()
client.run('redacted')

Следующее это список вопросов, на которые, я надеюсь, кто-нибудь может ответить, чтобы помочь мне:)

  1. Как вы видите здесь: https://gyazo.com/f6ae7082486cade72389534a05655fec, это просто посылает "{r. status_code} "во вставке, вместо действительного кода состояния, что я делаю неправильно?

  2. Что это значит, когда я вижу 0 в фигурных скобках. Например, может кто-нибудь объяснить мне «('Вы вошли как {0}!'. Format (self.user))"? Поскольку я новичок в python и discord.py, я запутался во всей этой строке. Я знаю, каков будет результат, но простите мое невежество, все ли это необходимо?

  3. В "send (embed = embed)", почему я не могу просто поставить send (embed) ?

  4. Наконец, есть ли что-нибудь еще, что я могу сделать, чтобы улучшить код?

Большое спасибо, если вы можете помощь!

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020
  1. В строке вы устанавливаете описание встраивания, выводя r.status_code в виде строки вместо значения, которое оно содержит. Попробуйте embed.description = '**Status Code:** {0}'.format(r.status_code)

  2. 0 напоминает индекс значения, которое должно быть там. Например, '{1}'.format(10, 20) выведет значение по индексу 1, которое в данном случае равно 20.

  3. Когда вы используете send(embed), тогда бот в конечном итоге отправит вставку в строку форма, которая будет выглядеть очень странно, если вы попытаетесь отправить ее, вы поймете, что я имею в виду. В этом случае мы должны указать, какому аргументу мы присваиваем значение. Эта функция принимает kwargs, которые являются аргументами Keyworded, в этом случае embed является одним из kwargs в этой send() функции. Эта функция принимает и другие kwargs, такие как content, tts, delete_after, etc. Все это задокументировано.

  4. Вы можете упростить создание встраивания, передав kwargs, например: discord.Embed(title='whatever title', color='whatever color') discord.Embed() может поддерживать больше аргументов, если вы посмотрите на документацию.

Вот ссылка на документацию: https://discordpy.readthedocs.io/en/latest/index.html Если вы ищете TextChannel, и найдите функцию send(), вы можете найти больше поддерживаемых аргументов, а также discord.Embed().

0 голосов
/ 16 февраля 2020

Хорошо, работаем над списком вопросов:

  1. Вы не форматируете {r.status_code}, а просто отправляете его в виде строки, поэтому он отображается именно так. Чтобы исправить это, все, что вам нужно сделать, это добавить 1 "f".
embed.description = f'**Status Code:** {r.status_code}'

или, если вы хотите использовать последовательный способ форматирования строк:

embed.description = '**Status Code:** {0}'.format(r.status_code)
В Python фигурные скобки '{}' в строке могут использоваться для форматирования. Это может быть сделано несколькими способами, включая то, как вы делаете это в своем коде. str.format () может принимать несколько аргументов, если вы хотите отформатировать разные значения в вашей строке. 0 - это просто индекс, для которого вы хотите использовать аргумент. Я не слишком знаком с библиотекой Discord, но, посмотрев быстро на документацию, может показаться, что если вы это сделаете, то потребуется свою переменную embed и передайте в send как переменную content. Тем самым отправляя его как обычное сообщение вместо встраивания. Мне лично больше нравятся f-строки для форматирования, потому что это делает ваш код более читабельным. Я не могу прокомментировать ваше использование библиотеки Discord, но, кроме того, ваш код выглядит хорошо! Чисто для эстетики / читабельности я бы поставил пустую строку между вашими импортом и определением ваших переменных, а также между вашими переменными и вашим классом.
...