PDA

Просмотр полной версии : Telegram бот: пересылка сообщений из миров в Telegram и обратно


TEST

doctor
29.01.2024, 12:14
По просьбам трудящихся сделан новый бот, который пересылает чат миров в Telegram и обратно. Таким образом, можно "быть" в мирах с мобилки или любого другого девайса куда можно установить телеграм. Похожая идея уже была воплощена (http://forum.activeworlds.ru/showthread.php?433), но теперь она адаптирована к новым реалиям (телеграм) и доработана. Бот в первую очередь предназначен для хранителей миров которые хотят "подключить" чат своего мира к телеграму, но в принципе его может запускать любой гражданин (тогда чат будет локально в мирах).

Вот как это вглядит:

http://teatr.activeworlds.ru/bots/telegram_bot/img/telegram_relay_bot.jpg (http://teatr.activeworlds.ru/bots/telegram_bot/img/telegram_relay_bot.jpg)

Бот на скриншоте "RUAW Chat Relay" (https://t.me/ruawchat_bot) это бот в мире Start, ему можно написать сообщение в Telegram чтобы переслать его в Start. Этот бот пока работает в тестовом режиме и не всегда онлайн. Ниже инструкции как создасть и запустить своего телеграм-бота для связи с мирами. Для тех у кого есть навыки программирования на C++ и желание добавить новые функции, исходный код и инструкции см в "Кратком руководстве программиста" ниже.

Установка и настройка бота


Взять файлы отсюда: http://teatr.activeworlds.ru/bots/telegram_bot/ruawchat_telegram_v1.3.zip
Распаковать архив и запустить ruawchat_telegram.exe. Системные требования: Windows (протестирован на 10 версии), вроде как работает также из-под Wine на Linux. Если при запуске exe окошко сразу закрывается, возможно не хватает библиотек. В этом случае может помочь установка Visual C++ Redistributable с сайта Microsoft (https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170).
При первом запуске бот будет спрашивать настройки вроде номера гражданства, пароля привелегий и т.д. - здесь всё должно быть достаточно очевидно. Дальше спросит "Telegram token (for Telegram bot)". Чтобы получить этот токен, надо сначала создать бота в Telegram, для этого нужно написать @BotFather и следовать инструкциям. Именно с этим ботом люди в Telegram будут связываться чтобы писать сообщения в миры. Еще спросит "Your telegram ID?" - этот вопрос можно пропустить но лучше сразу задать свой Telegram ID, если известно, чтобы автоматически быть админом в боте. ID это не номер телефона! Если не знаешь свой ID тогда пропусти этот вопрос, потом увидишь в логах бота.
Если всё прошло успешно, бот напишет "Connecting to Telegram bot with specified token... Done." Теперь можно попробовать написать боту в телеграм (для этого надо его там найти и начать чат). Бот ответит "Похоже мы еще не знакомы..." - значит всё в порядке, см. следующую инструкцию.


Краткое руководство пользователя


При первом общении с ботом в телеграме он попросит задать имя с помощью команды /setname. Лучше задать свой ник в мирах, но можно любое имя. После того как имя задано можно написать /start чтобы начать пересылку сообщений. С этого момента все сообщения отправленные боту (кроме команд, которые начинаются с /) будут пересылаться в миры и обратно. В мирах работа бота зависит от привилегий. Если есть привелегии хранителя, отправка сообщений будет со всего мира (глобал), в противном случае в локальный чат рядом с ботом - и обратно.
Если при установке бота не был задан твой telegram ID, тогда в мирах имя будет отображаться в кавычках (и серым текстом если бот в глобале). Так же будет для всех новых пользователей бота. Это сделано чтобы показать что имя было выбрано пользователем самостоятельно и никем не проверено. То есть как турист в мирах может выбрать себе любое имя, в том числе такое же как и у существующих граждан. Чтобы верифицировать имена пользователей (доступно только админам - об этом ниже), нужно написать боту /verify <telegram_id> <name>. Например /verify 123456 doctor. После этого пользователь с телеграм ID 123456 может писать от имени doctor нормальным текстом без кавычек, как гражданин в мирах.
Так где же взять telegram ID и как сделать себя админом бота? (Если ID уже был задан при установке бота, пропусти этот шаг). Свой telegram id, а так же любого кто написал боту можно увидеть в консоли бота - по сообщениям вроде "Telegram user John Smith (id:123456) wrote...". Если бот был запущен без указания telegram ID хозяина, тогда нужно его закрыть, и в файле names_and_privilegies.txt поменять строку вроде 123456 doctor doctor 0 0 0 на 123456 doctor doctor 1 1 0 - поменять два нуля на единицы, таким образом верифицировав свое имя и добавив себя в админы. Затем запустить бота опять. К счастью так нужно сделать только один раз для себя.
После этого можно верифицировать имена пользователей командой /verify <telegram_id> <name> (см выше), а также доступны другие команды админа. А именно:
/ban <telegram_id> - очевидно. Для этого пользователя будет остановлена пересылка сообщений в обе стороны.
/restore <telegram_id> - разбанить пользователя.
/forget <telegram_id> - "забыть" пользователя. То есть удалить из админов, верифицированных имен и остановить пересылку сообщений. Учти в этом случае пользователь может опять начать чат, только потеряет все привилегии.
/addadmin <telegram_id> - добавить в админы. Осторожнее с этим, админы могут всех банить и при этом могут разбанить сами себя.
/settimeout <0-720> - установить время, в часах, после которого пользователям телеграм автоматически отключается пересылка сообщений при неактивности. Они всегда могут её включить обратно написав /start. Смысл этой настройки в том, чтобы если бот работает постоянно, кто-то в телеграм не получал все сообщения чата, скажем, за год, если один раз начал чат с ботом. Активные пользователи (кто отправляет сообщения) с этим ограничением не столкнутся. Если задать /settimeout 0 то функция будет отключена - все сообщения будут пересылаться всегда. Значение по умолчанию: 24 часа
Другие команды доступные всем пользователям: /help, /settings - очевидно, а также /stop - остановить пересылку сообщений. Это удобно чтобы бот не флудил сообщениями из миров, т.е. "остановить" чат. При этом все настройки сохраняются и обратно включить можно в любой момент написав /start.


Краткое руководство программиста


Исходный код в архиве вместе с ботом - "source.zip", он включает необходимые библиотеки для API миров, но не телеграм (об этом ниже).
Код написан на C++, основной файл программы mobile_chat/main.cpp.
Проект создан в Visual Studio 2022 (Community Edition), основной файл решения ruawchat_telegram.sln. Рекомендуется использовать ту же версию для более предсказуемых результатов.
Код бота зависит от библиотеки https://github.com/reo7sp/tgbot-cpp/tree/v1.7.2 (Telegram C++ API) и других библиотек, которые автоматически устанавливаются в систему при установке tgbot: см инструкции "Library installation on Windows" в https://github.com/reo7sp/tgbot-cpp/blob/v1.7.2/README.md. Инструкции в подразделе "Setup project with CMakeLists" выполнять не нужно - проект уже установлен в решение Visual Studio.
Документация (SDK) миров доступна здесь: https://wiki.activeworlds.com//index.php?title=SDK.

doctor
10.02.2024, 16:00
Новая версия бота: http://teatr.activeworlds.ru/bots/telegram_bot/ruawchat_telegram_v1.4.zip.

Исправлен баг: когда в мирах много сообщений сразу, часть из них в Телеграм "не доходила".
Касается только тех кто хочет править код: сделан рефакторинг кода, Телеграм бот полностью отделен от бота миров и теперь живет в своем отдельном классе.

doctor
11.02.2024, 18:49
Вдогонку:

Добавлена команда /status, с помощью которой можно увидеть кто онлайн в мирах и в Телеграм.
И её эквивалент в мирах, нужно написать "телеграм-бот статус".

Ссылка та же, выше.

doctor
21.02.2024, 23:32
Новая версия бота: http://teatr.activeworlds.ru/bots/telegram_bot/ruawchat_telegram_v1.5.zip

Стабильность: теперь бот не падает и не зависает при отсутствии соединения, а пытается переподключиться - как в миры, так и в Телеграм. Сообщения об этом сохраняются в логах и пересылаются админам бота непосредственно в Телеграм (если только миры недоступны; если соединение полностью пропало, это сообщение приходит только когда/если соединение опять восстановлено).
Теперь действие команды /settimeout не распространяется на админов бота. Это значит что независимо от этой настройки, админы получают все сообщения независимо от их активности. Это сделано чтобы админу было проще следить за тем что происходит с ботом. При этом если сообщений слишком много и они нерелевантны, админ всегда может отключить пересылку сообщений себе командой /stop. В том числе поэтому, повторюсь, в админы бота следует добавлять только узкий круг людей которые непосредственно контролируют бота, и ни в коем случае не всех подряд.
Небольшое улучшение: теперь можно настраивать аватар бота и его точную позицию в мире, включая высоту и повороты.
Релевантно только для тех кто занимается хостингом ботов профессионально (на сервере): добавлен сервисный вариант программы бота - чтобы запускать его как Windows Service. Инструкции в файле README в папке "service" в архиве с ботом.

TAG.Hosting — Хостинг сайтов и Регистрация Доменов