Как создавался новогодний Хабрачат в этом году

Здравствуйте, коллеги!

Новый год подкрадывается всё ближе, а это значит, что нам снова пора собраться вместе для того чтобы хорошо провести время!

Для тех кто еще не знаком с новогодним хабрачатом, расскажу немного про него. Это несколько чатов на разных платформах, объединенных мостом. Боты в каждой из платформ пересылают сообщения из остальных и получается, что все как-бы находятся в одном чате, при этом не покидаю любимой платформы. В этом чате мы традиционно встречаем Новый год уже четвертый раз (в прошлом году только в одном SSH-чате было больше сотни человек).

В центре внимания, конечно, SSH-чат, который работает только несколько дней до нового года и несколько после. В этом году разные люди так же подняли чаты в XMPP (Jabber), Телеграмме и IRC. Так же традиционно есть чат-бот tars, который может вывести ёлку и поздравить с новым годом. В прошлые года таких ботов делали несколько человек (кто-то даже на баше).

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

Настраиваем SSH-чат

SSH-чат обычно открывает @podivilov, для этого используется кастомный SSH сервер, написанный на go. Устанавливается и настраивается он довольно просто. Для начала можно освободить стандартный порт SSH, чтобы при заходе в наш чат не вводить порт. В ubuntu server, например, это делается так. В файле /etc/ssh/sshd_config находим строку Port 22 и меняем число на нужный порт. После этого перезапускаем ssh демон sudo systemctl restart sshd и стандартный порт свободен (убедитесь, что фаерфол пропустит вас по новому порту).

Скачивается бинарник под нужную платформу из релизов на github. Можно положить его, например, в /usr/bin. Далее пишем простой скрипт, который будет перезапускать сервер, в случае падения.

Скрипт для запуска сервера start.sh
#!/bin/bash

while :
do

/usr/bin/ssh-chat --admin=/root/.config/ssh-chat/admins --bind=0.0.0.0:22 --log /root/ssh-chat.log --motd=/root/.config/ssh-chat/motd

sleep 1

done

Давайте разберем параметры запуска

  • admin путь до файла со списком публичных ключей администраторов (у них стандартный набор возможностей: кик, бан и прочее)

  • bind айпи и порт, на котором сервер будет транслировать

  • log путь до файла с логами чата

  • motd путь до файла с сообщением дня (message of the day), которое будет показываться при каждом заходе в чат

Теперь мы можем запустить этот скрипт любым удобным способом (в сессии tmux/screen, через systemctl и т.д.) и чат готов. Вводим ssh nickname@habr2021.podivilov.ru и попадаем в наш чат. Для списка комманд нужно ввести /help, а для выхода /exit или Ctrl+D.

Настраиваем мост между чатами

Мост уже который год хостит @mrDoctorWho, для этого используется matterbridge, который кстати тоже написан на go. Его установка и настройка, как ни странно происходит точно так же. Скачиваем бинарник из релизов на github и кладем его, куда нам надо. Далее пишем конфигурационный файл и скрипт старта. Как-то так выглядит конфиг от @mrDoctorWho:

Файл конфигурации matterbridge.toml
[xmpp.myxmpp]
Server="helldev.net:5222"
#Jid your userid
Jid=""
Password=""
Muc="conference.helldev.net"
Nick="bridge"
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "


[sshchat.mychat]
Server="habr2021.podivilov.ru:22"
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "

[telegram.mytelegram]
Token=""
RemoteNickFormat="[{PROTOCOL}] `<{NICK}>` "
MessageFormat="Markdown"

[general]
MediaDownloadPath="/var/www/"
MediaServerDownload="https://helldev.net/"


[[gateway]]
name="gateway1"
enable=true


[[gateway.inout]]
account="telegram.mytelegram"
channel="-1001200239638"

[[gateway.inout]]
account="sshchat.mychat"
channel="sshchat"

[[gateway.inout]]
account="xmpp.myxmpp"
channel="ny"

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

А вот скрипт запуска, который почти ничем не отличается от скрипта для SSH-чата:

Скипт для запуска моста start.sh
#!/bin/bash

while :
do

/usr/bin/matterbridge -conf /root/.config/matterbridge/matterbridge.toml

sleep 1

done

После старта этого скрипта мы имеем полностью работающий мост между всеми нашими чатами.

Создание чат бота

Чат-бот, который гуляет по чатам уже который год подряд, называется tars. Бот поздравляет с Новым годом, выводит новогоднюю ёлку ASCII-артом и имеет несколько других команд, в зависимости от того, кто его делал. Первая версия была запущена три года назад, к сожалению не помню кем. Бот был написан на bash-скрипте с использованием screen.

Свою версию я писал на JavaScript с использованием только стандартных библиотек. С его исходным кодом можно ознакомиться здесь. Если вкратце, он вызвает процесс командной строки с помощью модуля child_process (в зависимости от операционной системы, используются либо bash.exe, либо bash). Далее он открывает ssh сессию может писать либо читать прямо из нее. Кроме этого, код довольно заурядный, с его последней версией вы можете ознакомиться на гитхабе.

Как попасть в чаты

Выбирайте любой понравившийся и присоединяйтесь. С наступающим Новым Годом!

Let’s block ads! (Why?)

Read More

Recent Posts

Роскомнадзор рекомендовал хостинг-провайдерам ограничить сбор данных с сайтов для иностранных ботов

Центр управления связью общего пользования (ЦМУ ССОП) Роскомнадзора рекомендовал компаниям из реестра провайдеров ограничить доступ поисковых ботов к информации на российских сайтах.…

9 часов ago

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

5 дней ago

Российская «дочка» Google подготовила 23 иска к крупнейшим игрокам рекламного рынка

Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…

6 дней ago

Google завершил обновление основного алгоритма March 2024 Core Update

Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…

6 дней ago

Нейросети будут писать тексты объявления за продавцов на Авито

У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…

6 дней ago

Объявлены победители международной премии Workspace Digital Awards-2024

24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…

6 дней ago