An open API service indexing awesome lists of open source software.

https://github.com/kreipikc/mattermost-botpoll

Бот для создания и управления голосованиями в Mattermost, разработанный на Golang с использованием Tarantool в качестве базы данных
https://github.com/kreipikc/mattermost-botpoll

docker-compose golang mattermost-bot postgresql tarantool

Last synced: about 2 months ago
JSON representation

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

Awesome Lists containing this project

README

          

# Mattermost Bot-poll
## Быстрый старт
### 1. Клонируем репозиторий в удобное для вас место на устройстве:
```
git clone https://github.com/kreipikc/mattermost-botpoll.git
```
### 2. Настраиваем переменные окружения:
1. Находим файл `.env.example` в корне проекта;
2. Создаем в этой же директории файл `.env`;
3. Вставляем все данные из `.env.example`;
4. При необходимости меняем данные.

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

Находим `/app/envs/.env.example`, проделываем те же шаги, что и с первым файлом окружения, но при изменении данных нужно учитывать:
- *TARANTOOL_USER* и *TARANTOOL_PASSWORD* должны быть одинаковыми в обоих `.env` файлах;
- Для запуска через docker (с настройками по умолчанию) не нужно менять ничего кроме *MATTERMOST_TOKEN* (токен бота из Mattermost).

### 3. Запускаем все через `docker-compose`:
```
cd /mattermost-botpoll
docker-compose up --build -d
```

### 4. Все готово! Теперь можно протестировать бота в Mattermost по ссылке - http://localhost:8065/
Для посмотра всех команд для работы с голосованиями напишите в чат: `!help`

## Общая информация
Работа была выполнена в соответствии с ТЗ.

Все команды бота:
1. `!hello` - тестовая команда для проверки работы бота;
2. `!help` - вывод всех команд для работы с голосованиями;
3. `!poll ` - создание голосования;
4. `!info_poll ` - вывод данных о голосовании;
5. `!vote_poll ` - проголосовать за вариант;
6. `!end_poll ` - завершение голосования (только автор);
7. `!delete_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
```

## Возможные вопросы и ошибки
### При первом запуске контейнер `bot` не запускается
Пример вывода ошибки:
```
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** чтобы её решить нужно:
1. Проверить токен *MATTERMOST_TOKEN* в `/app/envs/.env`;
2. Если он есть, то проверьте верность токена;
3. Если токена нет, то нужно зарегистрироваться в мессенджере **Mattermost** и создать его в настройках профиля;
4. Вставить токен в поле *MATTERMOST_TOKEN* в файле `/app/envs/.env`.