Телеграм-бот для организации встреч Random Coffee.
Через @BotFather
Бот должен уметь принимать 3 команды:
start - Главное меню / Профиль
info - Справка
feedback - Оставить отзыв
+1 команда для бота, используеющегося в разработке:
status - Состояние диалога
./start_production.sh
./start_development.sh
# MOSCOW LOCAL TIME IS +3h RELATIVE TO SYSTEM TIME
# m h dom mon dow command
0 9 * * THU ~/random_coffee_platform/scripts/send_invitations_prod.sh
0 9 * * MON ~/random_coffee_platform/scripts/connect_participants_prod.sh
0 15 * * FRI ~/random_coffee_platform/scripts/collect_feedback_prod.sh
SQLite. 1 file = 1 database.
Подключиться к базе:
sqlite3 random_coffee_platform/db.sqlite3
Показать таблицы
.tables
Посмотреть число пользователей в базе:
SELECT COUNT(*) FROM connector_user;
Выйти из базы: Ctrl+D.
- Пошарить контакт, не зная его телефон, нельзя - API потребует указания обоих полей.
- Телефоны для фейковых Телеграм-аккаунтов можно взять тут: https://sms-activate.ru/ru/
- Django-обвязка во многом перенята у https://github.com/jlmadurga/django-telegram-bot
- Чтобы что-то вывести в лог, использовать logger.info() / logger.error()
- Все состояния бота пишутся в стиле CamelCase и заканчиваются на State, перечислены в chatbot.py
- Чтобы создать пользователя вручную, нужно обязательно создать оба объекта User и UserState
- Забаненным пользователь (enabled=False в User) больше не рассылаются приглашения
- Так как в России Телеграм забанен, запускаем его локально в режиме polling и берем прокси у Proxymesh https://www.proxymesh.com/
- Создание SSL сертификата для получение сообщений по webhook'ам: https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu-14-04
- Мотивация встречи - должно быть multiple choice поле
- Добавить выбор темы встречи - прикольно @MRRandomCoffeeBot, но там быстро образуется бардак
- В профиле нужно добавить кнопку "Отказаться от встречи на этой неделе"
- Показывать иконку "печатает" в боте после получения сообщения от пользователя (https://github.com/python-telegram-bot/python-telegram-bot/wiki/Code-snippets, Send chat action)
- Отправлять не только телефон, но и телеграмный username в составе описания встречи (чтобы клинкул и перешел)
- Добавить список разрешенных/запрещенных пользователей
- Вынести настройки системы в админку Django
- Добавить функцию "Рассылка новостного сообщения"
- Переставить местами строки в профиле, чтобы номера строк соответствовали номерам вопросов
- Локализация - чтобы можно было выбирать язык интерфейса.
- Текстовое поле "комментарий" для каждого пользователя
- Рефакторинг: chatbot.py все еще использует переменные из vars.py, но не все;
- Тесты: код прошел только ручное тестирование, unit тесты не написаны
- Все, что отмечен в коде метками TODO
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
proxy_pass http://localhost:8081;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /home/admin/cert.pem;
ssl_certificate_key /home/admin/pkey.key;
location /<BOT_TOKEN> {
proxy_pass http://127.0.0.1:8081;
}
location /<BOT_TOKEN> {
proxy_pass http://127.0.0.1:8081;
}
}