git clone https://github.com/kreipikc/mattermost-botpoll.git
- Находим файл
.env.example
в корне проекта; - Создаем в этой же директории файл
.env
; - Вставляем все данные из
.env.example
; - При необходимости меняем данные.
Дальше настраиваем переменные окружения в самом боте.
Находим /app/envs/.env.example
, проделываем те же шаги, что и с первым файлом окружения, но при изменении данных нужно учитывать:
- TARANTOOL_USER и TARANTOOL_PASSWORD должны быть одинаковыми в обоих
.env
файлах; - Для запуска через docker (с настройками по умолчанию) не нужно менять ничего кроме MATTERMOST_TOKEN (токен бота из Mattermost).
cd <your_path>/mattermost-botpoll
docker-compose up --build -d
4. Все готово! Теперь можно протестировать бота в Mattermost по ссылке - http://localhost:8065/
Для посмотра всех команд для работы с голосованиями напишите в чат: !help
Работа была выполнена в соответствии с ТЗ.
Все команды бота:
!hello
- тестовая команда для проверки работы бота;!help
- вывод всех команд для работы с голосованиями;!poll <title> <description> <date_end> <variants: obj1, obj2...>
- создание голосования;!info_poll <id_poll>
- вывод данных о голосовании;!vote_poll <id_poll> <variant>
- проголосовать за вариант;!end_poll <id_poll>
- завершение голосования (только автор);!delete_poll <id_poll>
- удаление голосования (только автор).
Все сервисы в docker-compose
:
- postgres - сервис с базой данных PostgresSQL для работы Mattermost;
- mattermost - сервис с мессенджером Mattermost;
- tarantool - сервис с базой данных Tarantool для хранения информации о голосованиях;
- bot - сервис с ботом на Golang, обрабатывающий команды.
Структура проекта:
mattermost-botpoll
├── .dockerignore
├── .env.example
├── .gitignore
├── README.md
├── app // Директория с приложением
│ ├── Dockerfile
│ ├── bot // Модуль для работы бота
│ │ ├── client.go // Работа с клиентом бота в Mattermost (инициализация и т.д.)
│ │ └── handle.go // Обработка команд
│ ├── cmd // Модуль с иcполняемым приложением
│ │ └── main.go // Точка входа приложения
│ ├── commands // Модуль с командами
│ │ ├── hello.go
│ │ ├── help.go
│ │ ├── ...
│ │ └── pollVote.go
│ ├── config // Модуль с инициализацией конфига
│ │ └── config.go
│ ├── database // Модуль для работы с базой данных
│ │ └── tarantool.go // Инициализация и функции для базы данных Tarantool
│ ├── envs // Модуль с переменными окружения
│ │ └── .env.example // Шаблон для .env
│ ├── go.mod
│ ├── go.sum
│ ├── models // Модуль с моделями (структурами)
│ │ ├── poll.go
│ │ ├── post.go
│ │ └── user.go
│ └── utils // Модуль для утилит
│ ├── convertToInt.go
│ └── response.go
└── docker-compose.yml
Пример вывода ошибки:
2025-05-21 11:21:21 Ошибка получения пользователя: ошибка: 401, тело: {"id":"api.context.session_expired.app_error","message":"Invalid or expired session, please login again.","detailed_error":"","request_id":"39ff5448fbd38pr8npg5qsrejr","status_code":401}
2025-05-21 14:21:21 exit status 1
Данная ошибка указывает на неудачную авторизацию бота в Mattermost чтобы её решить нужно:
- Проверить токен MATTERMOST_TOKEN в
/app/envs/.env
; - Если он есть, то проверьте верность токена;
- Если токена нет, то нужно зарегистрироваться в мессенджере Mattermost и создать его в настройках профиля;
- Вставить токен в поле MATTERMOST_TOKEN в файле
/app/envs/.env
.