Собираюсь написать бота, который мог бы управлять событиями, контактами и заметками. Столкнулся с такой проблемой, что не знаю, где можно его захостить
Планировал его использовать, так что накидал основу под него. Хотелось бы еще, чтобы он работал в более интерактивном режиме, чем сейчас. На данный момент все команды нужно вводить сразу целиком
В целом он работает, но не так, как ожидалось
/help- узнать, что умеет бот/time- узнать текущее время/set_time- синхронизировать локальное время с временем, которое использует бот/suggest- предложить изменения, которые стоит сделать/notify- поставить уведомление на определенное время
/add_event- добавить событие. Если возможно, пришлет уведомление за 2 часа до начала/import_events- добавить события из .ics файла/view_events- просмотреть все сохраненные события/export_events- записать все события в .ics файл/cancel,/cancel_old,/cancel_all- удалить конкретное событие, прошедшие события и все события соответственно/share,/share_all- поделиться несколькими или всеми событиями с другим пользователем tg
/add_contact- добавить контакт/import_contacts- добавить контакты из .vcf файла/view_contacts- просмотреть сохраненные контакты/export_contacts- записать все контакты в .vcf файл/remove,/remove_all- удалить конкретный контакт и все контакты соответственно/send,/send_all- поделиться несколькими или всеми контактами с другим пользователем tg
/add_note- добавить заметку/import_note- добавить заметку из .txt файла/view_notes- просмотреть сохраненные заметки/export_notes- записать все заметки в .txt файл/delete,/delete_all- удалить конкретную заметку и все заметки соответственно/drop,/drop_all- поделиться несколькими или всеми заметками с другим пользователем tg
Для хранения этих данных используем вспомогательные структуры
Класс Time будет хранить время в минутах, прошедших с 00:00 01.01.2020. Добавим ему операторы сравнения, сложения и вычитания. Они понадобятся в дальнейшем. Приведение к строке нужно для вывода времени в сообщении
class Time:
minutes: int
def __init__(self, time: str) -> None:
pass
def __eq__(self, other) -> bool:
pass
def __lt__(self, other) -> bool:
pass
def __str__(self) -> str:
pass
def __add__(self, other):
pass
def __sub__(self, other):
passКласс Case будет хранить время начала и время конца события, его описание, а также идентификатор, по которому можно будет удалять событие. Помимо операторов сравнения и приведения к строке, есть метод to_share, возвращающий строковое представление события, которое будет использовано при отправке другим пользователям. Это же будет верно для следующих классов
class Case:
start: Time
end: Time
description: str
case_id: str
def __init__(self, data: list[str]) -> None:
pass
def __eq__(self, other) -> bool:
pass
def __lt__(self, other) -> bool:
pass
def __str__(self) -> str:
pass
def to_share(self) -> str:
passКласс Contact хранит телефон человека и его имя. Опционально можно добавить почту. Также содержит идентификатор
class Contact:
telephone: str
name: str
email: str | None
contact_id: str
def __init__(self, data: list[str]) -> None:
pass
def __eq__(self, other) -> bool:
pass
def __lt__(self, other) -> bool:
pass
def __str__(self) -> str:
pass
def to_share(self) -> str:
passКласс Note хранит заметку, ее название и идентификатор
class Note:
text: str
title: str
note_id: str
def __init__(self, data: str) -> None:
pass
def __eq__(self, other) -> bool:
pass
def __lt__(self, other) -> bool:
pass
def __str__(self) -> str:
pass
def to_share(self) -> str:
passДля начала нужно получить токен у Bot Father. Здесь можно почитать про то, как с ним взаимодействовать
Для работы проекта нужно установить переменные API_TOKEN и ADMIN.
Сделать это можно разными способами, например:
- Только на текущую сессию
export API_TOKEN="<your api token>"
export ADMIN="<your tg username>"- Только для текущей оболочки shell
Для этого нужно написать те же строчки в файл ~/.bashrc
- Только для текущего пользователя
Дописываем те же строчки в файл ~/.profile
- Установить постоянные переменные окружения
В файле /etc/environment дописываем строки
API_TOKEN="<your api token>"
ADMIN="<your tg username>"Установить все нужные зависимости можно с помощью
pip install -r requirements.txtПосле этого проект готов к запуску. Достаточно использовать команду
python3 main.py