Как отправить сообщение на определенный канал discord py

Обновлено: 01.07.2024

Если вы хотите работать с текстовыми данными с ваших серверов разногласий, лучше всего подойдет простой бот.

В наше время приложения, использующие текстовый анализ, есть везде: от обычного спам-фильтра электронной почты до чат-ботов, способных находить в сообщениях достаточно смысла, чтобы они могли даже отвечать на них.

Существует множество возможностей обработки текста, но что бы вы ни хотели сделать, для этого вам потребуются данные. И хотя эти данные могут поступать практически из любого места, если вам нужны текстовые данные, отражающие то, как люди разговаривают в течение дня, вам не нужно искать ничего, кроме социальных сетей.

Некоторые платформы социальных сетей, такие как WhatsApp или Telegram, позволяют напрямую экспортировать историю чатов, чтобы вы могли использовать ее по своему усмотрению. Но для тех из нас, кто хочет сделать что-то с участием других платформ, мы должны придумать собственный способ сделать это. Вот почему в этом посте я покажу вам, как использовать бота Discord, чтобы очищать ваши собственные серверы от данных истории сообщений, чтобы использовать их по своему усмотрению.

Во-первых, вам нужно создать приложение на портале разработчиков Discord, чтобы иметь токен для вашего бота. Все, что вам нужно сделать, это войти в свою учетную запись Discord, а затем нажать «Новое приложение» и дать ему имя. Вы также можете загрузить изображение и описать его, если хотите.


Создав приложение, перейдите на вкладку бота в меню настроек и нажмите Добавить бота. Вы можете выбрать имя пользователя своего бота в Discord и загрузить его изображение профиля, которое будет таким же, как и для приложения по умолчанию. Но на этой странице нам нужен ваш токен, который нам понадобится для запуска бота.


После создания бота последнее, что вам нужно сделать перед тем, как приступить к написанию кода, — это установить discord.py, библиотеку, используемую для кодирования ботов Discord с помощью Python, и Pandas, библиотеку для анализа и обработки данных. Установку можно легко выполнить с помощью pip, выполнив одну из следующих строк:

Для пользователей anaconda Pandas уже установлен.

Начнем с импорта двух установленных нами модулей и определения переменных клиента и гильдии, которые используются для ссылки на самого бота и серверы, также называемые гильдиями, соответственно.

Чтобы сделать бота универсальным, чтобы нам не приходилось постоянно получать уникальный идентификатор каждого сервера, который мы хотим проанализировать, мы сделаем так, чтобы бот считывал любой канал, в котором мы вызываем нашу команду.

Для этого мы используем асинхронную функцию on_message() из библиотеки discord.py, которая запускается каждый раз при отправке нового сообщения. Затем мы проверяем, является ли автор сообщения самим ботом, и, если нет, начинается ли сообщение с любой строки, которую мы определили как вызов нашей команды, в данном случае я установил «_».

Если сообщение начинается с вызова команды, мне нравится разделять его содержимое, а затем сохранять первый элемент в «командной» переменной, а остальные — в списке параметров. Но поскольку мы заставим бота читать канал, на котором вызовем команду, эта часть не является обязательной.

Если переменная «command» равна тому, что мы назвали нашей командой — в данном случае «_scan», — тогда мы запускаем наш код.

Есть много переменных, которые мы могли бы отслеживать в истории сообщений сервера. Но для простоты мы будем смотреть только на то, когда сообщения были отправлены, кто их отправил, а также на содержание самого сообщения. И для этого мы создаем фрейм данных, содержащий по одному столбцу для каждого.

Чтобы считать данные во фрейм данных, мы воспользуемся методом history() класса TextChannel в библиотеке discord.py, который мы получаем доступ к с помощью атрибута канала нашего сообщения. Этот метод позволяет нам использовать цикл for для перебора n сообщений в истории канала, где n является параметром самого метода, установленным по умолчанию на 100.

Оказавшись внутри цикла, мы можем использовать операторы if, чтобы избежать сообщений, отправляемых нашим ботом — в этом случае он не будет отправлять никаких сообщений — и вызовов команд, которые мы использовали для его запуска. Затем мы добавляем содержимое сообщения, время создания и автора — доступ к которым можно получить через атрибуты сообщения — во фрейм данных и используем метод Pandas to_csv(), чтобы сохранить его локально как файл . CSV-файл.

Текстовые данные из социальных сетей могут дать нам много информации о поведении людей, и это не исключение. Хотя создать бота для извлечения данных не так просто, как просто экспортировать их, это открывает путь к еще одной платформе с данными для анализа.

Если вам нужен бот, который принимает канал и количество сообщений для чтения в качестве параметров команды и имеет команду справки.У меня есть более продвинутая версия этого бота с этими функциями в моем GitHub на случай, если вы захотите скопировать или проверить полный код.

В любом случае, теперь, когда вы знаете, как получить данные, нет предела тому, что вы можете с ними сделать.

Коги представляют собой радикальные изменения в том, как вы пишете ботов в discord.py. Поэтому важно знать, как их использовать, а также разницу между их использованием и отказом от их использования, которая может вас застать врасплох.

Cogs — очень важная часть discord.py, которая обсуждается в этой учебной части, но это скорее руководство, начинающееся с самого начала, а не демонстрация того, как перевести существующий бот на использование Cogs, вот что это бонусная часть за!

В этой части я буду использовать подсказки (например, def foo(bar: Baz): ). Если этого не сделать, это не повлияет на работу бота, однако это сделает так, что из вашей IDE будет гораздо меньше полезных советов по коду, поэтому в целом я рекомендую использовать его там, где это возможно.

Во-первых, вот простой бот, которого я переведу на Cogs:

Если вы не знали, здесь, в событии on_message, очень важно, чтобы впоследствии мы использовали bot.process_commands, чтобы мы могли обрабатывать команды, иначе никакие команды не будут обрабатываться вообще. Это не проблема при использовании @bot.listen() вместо @bot.event или при использовании cogs.

Кроме этого пункта, вам потребуется хотя бы базовое понимание объектно-ориентированного программирования (ООП)/классов в Python. Если вы не знакомы с этим, посмотрите первое видео в учебнике по ООП Кори Шафера.

Далее мы можем перейти к фактическому созданию самого Cog, что мы собираемся сделать в другом файле с именем mycog.py:

Первое, на что следует обратить внимание, это то, что при создании класса у нас есть аргумент бота в конструкторе процессора. Это означает, что у нас могут быть процессоры в других файлах без необходимости каким-либо образом импортировать и ссылаться на бота из основного файла.

Далее есть функция настройки. Это то, что ищет discord.py при попытке загрузить Cog. Он должен называться setup, иначе программа не загрузится, и вы получите сообщение об ошибке.

Теперь, когда у нас есть простой процессор, мы можем добавить к нему существующий слушатель и команду:

Здесь необходимо отметить несколько ключевых изменений:

  1. Теперь мы передаем self в качестве первого аргумента каждой функции, потому что теперь мы внутри класса.
  2. Нам больше не нужно вызывать process_commands в прослушивателе on_message, так как теперь это прослушиватель, а не событие.
  3. Теперь при получении данных о задержке бота мы используем self.bot.latency , опять же, потому что теперь мы находимся внутри класса.

Хорошо, отлично! У нас есть винтик, теперь нам нужно загрузить этот винтик в основной файл. Я удалил событие и команду, так как они не в Cog, так что вот что у нас осталось:

Теперь нам нужно добавить всего одну строку кода, чтобы загрузить только что созданную шестеренку:

Настоятельно рекомендуется включить некоторую обработку ошибок при загрузке Cog, но то, как это будет реализовано, зависит от вас. Также может быть полезно иметь список процессоров, перебирать их и вызывать load_extension, чтобы не повторяться.

Уровень сложности: простой

Время реализации: примерно 20 минут

Предварительные требования: для настройки этого сценария необходимо следующее:

  1. Таблица Google с названиями столбцов и существующими данными.
  2. Учетная запись Discord с разрешением на управление веб-перехватчиками для текстового канала.

Привет, геймер! Извините, если это не так, но вы должны знать, что Discord предназначен для игровых сообществ. В любом случае, как только вы закончите с этим кратким руководством, оставьте ответ, чтобы сообщить мне, для чего вы используете Discord и эту интеграцию.

Сценарий для этого руководства содержит только два модуля и выглядит следующим образом:


Шаг 1. Настройте таблицу

Как упоминалось в разделе о предварительных требованиях, у вас должна быть настроена таблица Google с именами столбцов и некоторыми примерами данных. Если нет, создайте его, прежде чем продолжить. Вот как выглядит мой:


Шаг 2. Создайте веб-перехватчик на своем канале Discord

Discord позволяет создавать один или несколько веб-перехватчиков для каждого текстового канала. Если вы не знакомы с процессом, следуйте приведенным ниже инструкциям из трех шагов или перейдите к шагу 3.

  • В разделе ТЕКСТОВЫЕ КАНАЛЫ нажмите значок настроек рядом с названием канала:


  • Перейдите на вкладку "Веб-перехватчики" в меню слева и нажмите кнопку "Создать веб-перехватчик":


  • Дайте веб-перехватчику имя, скопируйте URL-адрес веб-перехватчика и нажмите "Сохранить".


Шаг 3:

Перейдите на панель инструментов Integromat, чтобы создать новый сценарий.

  • Нажмите на большой вопросительный знак, чтобы настроить Google Таблицы в качестве первого модуля, и выберите Просмотр листа в качестве триггера.


  • Выберите подключение к Google или добавьте новое, а затем выберите файл (таблицу, которую вы создали ранее) и рабочий лист в файле, содержащий образцы данных. В разделе «Максимальное количество возвращаемых строк» ​​введите количество сообщений, которые вы хотите отправлять при каждом запуске сценария. Если вы хотите отправить отдельное сообщение для каждой обновленной строки, введите 1, как показано ниже:


  • Нажав кнопку "ОК", вы увидите другое диалоговое окно, в котором вас попросят либо ввести номер строки, с которой вы хотите, чтобы модуль начал поиск обновлений, либо выбрать "Все строки".

Обратите внимание, что всегда предполагается, что первая строка или строка заголовка содержит имена столбцов. Следовательно, если вы введете 1, записи будут просматриваться, начиная со строки ниже строки заголовка.



  • В разделе URL вставьте URL веб-перехватчика, полученный ранее из канала Discord.
  • В разделе "Метод" выберите POST
  • .
  • В разделе "Тип тела" выберите Необработанный
  • В разделе "Тип контента" выберите JSON (application/json)
  • .
  • Наконец, в разделе «Запрос содержимого» введите сообщение, которое будет отправлено на канал в виде полезной нагрузки JSON в соответствии с API Discord. Чтобы отправить сообщение (строку), Тип поля — "контент", поэтому полезная нагрузка JSON должна быть записана следующим образом:

Поскольку триггер представляет собой таблицу Google со столбцами, содержащими данные, мы можем использовать имена столбцов, чтобы включить содержимое каждой ячейки в сообщение, отправляемое на канал. Мы также можем использовать разрывы строк (\n) в сообщении. Ниже то, что я составил:


  • Нажмите OK, чтобы завершить сценарий. Вы должны сохранить сценарий и переключить переключатель планирования в положение ВКЛ.
  • Чтобы определить расписание для сценария, нажмите на маленький значок часов рядом с переключателем или на анимацию больших часов на изображении модуля Google Таблиц, как показано ниже:


  • Вы также можете переименовать модули и добавить примечания к каждому из них, щелкнув изображение модуля правой кнопкой мыши:


Вот и все. Теперь обновите некоторые данные в своей таблице и запустите модуль один раз, чтобы убедиться, что все работает нормально, как показано ниже:

Читайте также: