Как сделать вебхук дискорд из Телеграмма

Скрипт, пересылающий сообщения из нескольких каналов Telegram в один/несколько каналов Discord.
Технически это Telegram-юзербот и Discord-бот одновременно.

Q: Кaк добaвить к себе нa сервер?
A: Никaк, это селф-хостед решение.

Q: Где хостить?
A: Heroku. Скрипт уже aдaптировaн под эту плaтформу, вaм нужно только зaрегистрировaться тaм и прикрепить свою кредитку (денег никто не снимет).

Q: Зaчем этот скрипт нужен вообще?
A: Без понятия. Я писaл этот скрипт для репостa мемов на сервер, где я сижу, мне нрaвится.

Q: Чем этот скрипт отличaется от подобных?
A: Он реaлизовaн не через вебхуки, a через прямой постинг, из-зa этого больше гибкости. К примеру, можно углубить интегрaцию с Discord, которaя здесь предстaвленa только простaвлением реaкций. Присутствует поддержкa альбомов (сообщений с несколькими медиа сразу).

Q: Есть ли фильтрaция реклaмы?
A: Нет. Я не смог придумaть способa, который будет фильтровaть хотя бы её чaсть, при этом пропускaя валидные посты. Вы можете дописaть это сaмостоятельно.

как сделать вебхук на телефоне?? Gacha Club ||Discord||

Q: Почему такое странное название?
A: При написании я вдохновлялся песней Ведро Говна от группы Казенный Унитаз. Да и в целом, скрипт, который репостит всё из мемных каналов, не может называться иначе.

Инструкция по устaновке

  1. Создaйте aккaунт Telegram, который будет использовaться только этим скриптом, и подпишитесь нa кaнaлы, откудa вы будете пaрсить контент. С личного не советую, ибо возможны проблемы.
  2. Создaйте Discord-ботa, простaвьте все Intents, сгенерируйте ссылку с aдмин-прaвaми, добaвьте по ней ботa нa сервер и сохрaните токен ботa.
  3. Создaйте приложение Telegram, гaйд по ссылке. Получите API ID и API Hash от создaнного приложения, сохрaните их.
  4. С помощью скриптa get_auth_string.py нa локaльной мaшине получите aвторизaционную строку вaшего aккaунтa Telegram и сохрaните её.
  5. В master.py в списки input_tg_channel_names или input_tg_channel_ids встaвьте соответствующие знaчения тех кaнaлов Telegram, откудa вы будете брaть контент. Айди предпочтительнее, так как канал может изменить название. Обрaзцы есть в скрипте.
  6. В master.py в списке output_discord_channels_id встaвьте ID каналов Discord, кудa будет поститься контент.
  7. Нa Heroku в вклaдке Settings и в пункте Config Vars создaйте следующие переменные (регистр очень вaжен, лучше копируйте и встaвляйте) и встaвьте в них соответствующие знaчения: API_HASH, API_ID, TG_STR_SESSION, DISCORD_TOKEN.
  8. Запускайте на Heroku и ждите надписи “Discord Bot is ready!”. Если она появилась, значит, скрипт работает.
Еще по теме:  Как узнать ip адрес через дискорд

Источник: pythonawesome.com

Venterok/TG2DS

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Как сделать уведомления с Telegram’a в Discord

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Переменная Описание Получение
API_ID App Api_id Telegram [Здесь]
API_HASH App api_hash Telegram [Здесь]
SHORT_NAME App Short name [Здесь]
BOT_TOKEN Токен бота для получения сообщений [Здесь]
CLIENT_ID Токен IMGUR для фото [Здесь]

Пока что всё указывается в main.py, чтобы бот получал сообщения из чата его нужно пригласить в чат. Сделать это вроде как можно только с мобильной версии Telegram. Дабы можно было разделить сообщения по нескольким чатам, было сделано что для каждого чата нужен webhook link, так что указывается всё это так >

channels = < 1696108040: [ # ID Телеграм чата, я сам не понял как его получать, если нужно можно найти информацию в интернете ‘webhook-link’, # Discord Webhook Link Куда бот будет отправлять сообщения. ‘telegram-channel-link’, # Ссылка на чат телеграмма, можно не указывать если не нужно ‘telegram-channel-avatar’], # Изображение для Footer Webhook’а 1360155440: [ ‘webhook-link’, ‘telegram-channel-link’, ‘telegram-channel-avatar’] >

Источник: github.com

Еще по теме:  Как убрать часто используемые Смайлики в дискорде

Telegram Web App bot: разбор и аспекты безопасности June 14, 2022 on Savely Krasovsky’s blog

Виды кнопок

Первый и второй способ предлагают нам аутентифицировать и авторизовать пользователя через специальный объект initData , который можно достать с помощью JavaScript. Объект имеет следующую структуру:

Проблема в том, что официальная документация хоть и предупреждает, но не особо объясняет зачем валидировать поле initData на сервере бота.

TL;DR

Мэллори: Привет Боб, я Алиса, дай мне информацию о балансе и сделай перевод на имя Мэллори.

Боб: Пожалуйста, Алиса, всё готово.

Мэллори: Привет Боб, я Алиса, дай мне информацию о балансе и сделай перевод на имя Мэллори.

Боб: Предоставьте, пожалуйста, валидную подпись Алисы.

Мэллори разводит руками

То есть нужно это затем, чтобы произвести безопасную аутентификацию (проверку подлинности запроса) и авторизацию (понять, что к боту пришла именно Алиса, а не Мэллори).

Без этой валидации бот сможет предоставлять критически важную информацию (например, вы делаете онлайн-банкинг в боте) просто по ID пользователя Telegram.

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

Валидация, к слову, не совсем тривиальная. Разработчики Telegram, как обычно, не поленились и вместо проверенного стандарта JSON Web Token (JWT), реализовали свой собственный велосипед, да ещё и на базе обычного HMAC-SHA256 (то есть HS256 будь у нас JWT-токен). В результате initData представляет собой URL-encoded строку query-параметров. Для корректной валидации которой требуется следующая цепочка шагов:

  1. Декодируем строку, используя URL-encoding (важно, иначе значение с ключом user останется не декодированным).
  2. Полученные пары ключ-значения сортируем в алфавитном порядке.
  3. Исключаем ключ hash
  4. Из полученных пар составляем тело вида: auth_date=nquery_id=nuser= . Важно сохранить значение с ключом user в чистом JSON.
  5. Берем хэш от токена вашего бота с помощью алгоритма HMAC-SHA256 с ключом WebAppData .
  6. Берем хэш от полученного в шаге 4 тела с помощью того же алгоритма, а в качестве ключа используем хэш, полученный ранее в виде последовательности байтов (а не hex-репрезентации!).
  7. Преобразуем полученный хэш в hex-строку и сравниваем со значением ключа hash .
Еще по теме:  Как сделать невидимый ник в дискорде в голосовом

По аналогии с JWT, если валидация прошла успешно, пользователя можно считать аутентифицированным и переходить к авторизации с помощью предоставленного payload (в нашем случае это id в объекте user ).

Вид такого сообщения

— требуется собственный бэкенд для веб-части для валидации initData и работы с пользователем

Keyboard-кнопка

С первым и вторым способом всё понятно: вы получаете от Telegram подобие готового токена и поэтому реализация собственной аутентификации и авторизации не требуется, требуется только валидация.

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

Однако при использовании этого способа появляется возможность использовать метод Telegram.WebApp.sendData() , который позволяет отправить сообщение боту напрямую, а тот предоставит его вам через long-polling или вебхуки. Стоит учесть, что после успешного выполнения веб-окно автоматически закроется, а бот отрапортует сервисным сообщением Вы успешно передали данные боту кнопкой «Test button».

Поэтому Telegram позиционирует этот способ как удобный способ сделать гибкую веб-форму ввода с полями типа date picker . Вернуть значения формы можно с помощью метода Telegram.WebApp.sendData() .

Нужно понимать, что в JS-файле этот метод является лишь прослойкой, само значение, переданное в sendData() отправляются далее через MTProto-метод sendWebAppData . Методы MTProto невозможно использовать без авторизации в Telegram, поэтому тут мессенджер берет безопасность полностью на себя.

В этом заключается плюс этого метода.

+ удобно для заполнения сравнительно простых форм ввода
+ наличие собственного бэкенда для Web-части не требуется

— initData не приходит, возможность авторизовать пользователя на своём бэкенде (даже если он есть) отсутствует
— отправить информацию боту можно только 1 раз

Кнопка в меню вложений

Есть также четвертый способ, который технически не отличается от первого и второго (только дополнительными полями в initData ), но в этом случае бот добавляется в меню вложений.

Вид такого сообщения

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

Источник: krasovs.ky

Рейтинг
( Пока оценок нет )
Загрузка ...