Skip to content

Instantly share code, notes, and snippets.

@Sagleft
Last active December 15, 2022 17:23
Show Gist options
  • Save Sagleft/1ec700b47e6e8b59d1599385d7139829 to your computer and use it in GitHub Desktop.
Save Sagleft/1ec700b47e6e8b59d1599385d7139829 to your computer and use it in GitHub Desktop.

Рассмотрим пошагово как установить клиент Utopia и настроить бота diano-bot для переноса контента из Telegram в Utopia канал.

Если вам нужен готовый образ виртуальной машины то можете найти его здесь (тут будет ссылка). Если захотите обновить клиент на виртуальной машине, то запустите скрипт ~/utopiahome/update_utopia.sh

Рассмотрим на примере системы с CentOS 7 и пользователем "utopiauser". Важно! Не работайте под рутом и не закидывайте бота в /root/... иначе что-то может не работать из-за прав доступа или потому что сломается относительный путь домашней папки.

Создаем папку, в которой будем работать.

cd ~
mkdir utopiahome
cd utopiahome

Установим необходимые пакеты. Тут предполагается, что вы используете чистую систему, на которой все эти зависимости еще не были установлены. Важно! Требуемая версия PHP - 7.1+, с 5.4+ бот работать не будет. При настройке mysql можете не устанавливать пароль для root, также убрать удаленный доступ.

sudo yum install -y unzip nano git composer wget epel-release yum-utils httpd
sudo systemctl enable httpd
sudo systemctl start httpd
sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager -y --enable remi-php72
sudo yum install -y php72 php72-php-fpm php72-php-mysqlnd php72-php-opcache php72-php-xml php72-php-xmlrpc php72-php-gd php72-php-mbstring php72-php-json
sudo ln -s /usr/bin/php72 /usr/bin/php
sudo yum install -y mod_php php-mbstring php-gd php-mysqli php-xml php-json mariadb mariadb-server

sudo systemctl enable mariadb.service
sudo systemctl start mariadb
/usr/bin/mysql_secure_installation
sudo systemctl restart mariadb
sudo systeemctl restart httpd

Скачиваем клиент и устанавливаем его:

sudo yum install -y libxkbcommon-x11.x86_64 libGL pulseaudio-libs-glib2 libXi libSM fontconfig libXrender mesa-libGL mesa-libGLU
wget https://update.u.is/downloads/linux/utopia-latest.x86_64.rpm
sudo rpm -ivh --replacepkgs utopia-latest.x86_64.rpm

также сделаем себе на будущее скрипт для обновления клиента:

nano update_utopia.sh

и внесите строки:

rm -rf utopia-latest.x86_64.rpm
wget https://update.u.is/downloads/linux/utopia-latest.x86_64.rpm
sudo rpm -Uvh --replacepkgs utopia-latest.x86_64.rpm

Чтобы сохранить файл в редакторе nano, нажмите Ctrl+F3. Будет предложено ввести имя файла, нажмите Enter. Чтобы закрыть рекдактор, нажмите Ctrl+F2.

Дальше нам нужен файл аккаунта. Скачайте на свою машину GUI-клиент Утопии и создайте новый аккаунт. Или возьмите свой файл аккаунта, как удобно. Назовите его account.db и поместите на машине с ботом по пути ~/utopiahome/account.db. Соответственно, если имя пользователя в системе utopiauser, то полный путь будет /home/utopiauser/utopiahome/account.db.

Далее создаем конфиг для запуска клиента.

nano utopia.cfg
[General]
apiEnabled=true
apiHTTPEnabled=true
apiHTTPSEnabled=false
apiHelpEnabled=false
apiPort=22824
apiSslPort=10100
apiUserTokens=70E7D72AC6D91B5585E4B7D2F8A9A437
applicationLastOpenedPath=account.db
userDatabase=/home/utopiauser/utopiahome/account.db
userPassword=accountpassword

Замените apiUserTokens, userDatabase и userPassword на свои. Токен вы можете указать любой. он должен быть той же длины и быть шестнадцатеричным. apiPort можете изменить, можете оставить.

Создаем скрипт на запуск клиента в консольном режиме (headless mode):

nano start.sh

Заполняем содержимым:

#!/bin/bash
/opt/utopia/messenger/utopia --headless --configPath=/home/utopiauser/utopiahome/utopia.cfg

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

Есть также альтернативный вариант: https://gist.github.com/Sagleft/645d094a9f728ae63480347c843b9b11 (а также сразу скрипт на настройку: https://gist.github.com/Sagleft/62d71f81ecf3fe23dce624fe182669cb )

nano ~/boot_utopia.sh

Содержимое:

#!/bin/sh

ps auxw | grep utopia | grep -v grep > /dev/null
if [ $? != 0 ]
then
  sh /home/utopiauser/utopiahome/start.sh > /dev/null
fi

если этот вариант у вас не заработал, то используйте такой:

#!/bin/sh
/usr/sbin/pidof utopia >/dev/null || sh /home/utopiahome/start.sh >/dev/null

Далее добавим задание в cron:

EDITOR=nano crontab -e

Добавляем строчку:

* * * * * bash /home/utopiauser/utopiahome/start.sh

Перезагружаем сервис:

systemctl restart crond

Скачиваем репозиторий бота:

cd ~/utopiahome/
git clone https://github.com/sagleft/diano-bot
cd diano-bot

устанавливаем зависимости:

sh install.sh

Если по какой-то причине установка composer-пакетов сбилась, вы можете обновить их командой composer update.

Далее создадим пользователя БД и самиу БД. Сначала зайдем под рутом:

mysql -u root

Вводим следующее:

CREATE USER 'dianouser'@'localhost' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON * . * TO 'dianouser'@'localhost';
FLUSH PRIVILEGES;
CREATE DATABASE dianodb CHARACTER SET utf8 COLLATE utf8_general_ci;

Выходим из mysql, нажимая Ctrl+C. Теперь импортируем дамп таблицы для каналов бота:

mysql -u dianouser -b dianodb<diano.sql

Дальше создадим задание на импорт нового канала. Удобнее всего для начала создать новый канал в Utopia через GUI клиент. Создайте канал, оформите его, скопируйте его channelid. В него мы будем грузить посты из Telegram канала. Допустим, возьмем Telegram канал: https://t.me/linuxgram

Важно! Бот работает только с публичными каналами. Брать контент из приватных каналов он не может, так как работа с Telegram происходит через сторонний парсер, это его ограничения.

Вы можете выставить своему каналу в Utopia права на чтение и запись для участников. Если вы выберете "только чтение", то это будет канал в привычном понимании. Если "чтение и запись", то это будет чат.

От url telegram канала нам потребуется только его тег - linuxgram. Для создания нового задания на перенос постов создадим .json файл:

cd ~/utopiahome/diano-bot/cache
nano testchannel.json

вставим содержимое:

{
	"source": {
		"tag": "telegram",
		"channelid": "linuxgram"
	},
	"destination": {
		"tag": "utopia",
		"channelid": "D968795137BF4BCDD232E7D5B04E95F2"
	},
	"params": {
		"limit": 3
	}
}

Далее настроим переменные окружения бота. Они записаны в .env

Пример содержимого .env:

db_host=localhost
db_user=root
db_pass=
db_name=diano
db_enabled=1
utopia_host=127.0.0.1
utopia_token=
utopia_port=20000
max_file_size_mb=10
is_debug=0

измените этот файл. в нашем примере, db_user = dianouser, db_name = dianodb, utopia_token = 70E7D72AC6D91B5585E4B7D2F8A9A437, utopia_port = 22824.

Дальше нам потребуется скрипт для преодической проверки постов:

nano ~/utopiahome/diano_update.sh

содержимое:

php ~/utopiahome/diano-bot/cron/execute_orders.php

Добавим задание в крон:

EDITOR=nano crontab -e

добавим строчку:

*/5 * * * * bash ~/utopiahome/diano_update.sh

Это будет означать проверку новых постов в каналах каждые 5 минут. Кстати у Utopia есть ограничение на не более чем 10 своих каналов на один аккаунт. Это ограничение я обхожу пока запуском дополнительных виртуальных машин.

Перезапустим крон, чтобы изменения вступили в силу.

systemctl restart crond

Проверить подключение к клиенту после настройки бота можно так:

cd ~/utopiahome/diano-bot/scripts
php test_utopia3.php

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

  • Crypton, UUSD: F50AF5410B1F3F4297043F0E046F205BCBAA76BEC70E936EB0F3AB94BF316804
[General]
apiEnabled=true
apiHTTPEnabled=true
apiHTTPSEnabled=false
apiHelpEnabled=false
apiPort=22824
apiSslPort=10100
apiUserTokens=70E7D72AC6D91B5585E4B7D2F8A9A437
applicationLastOpenedPath=account.db
userDatabase=/home/utopiauser/utopiahome/account.db
userPassword=accountpassword
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment