Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

Ким Михаил, Б05-327, Telegram бот, весна 2024

Описание проекта

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

Планировал его использовать, так что накидал основу под него. Хотелось бы еще, чтобы он работал в более интерактивном режиме, чем сейчас. На данный момент все команды нужно вводить сразу целиком

В целом он работает, но не так, как ожидалось

Ожидаемый функционал

1. Общие команды

  • /help - узнать, что умеет бот
  • /time - узнать текущее время
  • /set_time - синхронизировать локальное время с временем, которое использует бот
  • /suggest - предложить изменения, которые стоит сделать
  • /notify - поставить уведомление на определенное время

2. Работа с событиями

  • /add_event - добавить событие. Если возможно, пришлет уведомление за 2 часа до начала
  • /import_events - добавить события из .ics файла
  • /view_events - просмотреть все сохраненные события
  • /export_events - записать все события в .ics файл
  • /cancel, /cancel_old, /cancel_all - удалить конкретное событие, прошедшие события и все события соответственно
  • /share, /share_all - поделиться несколькими или всеми событиями с другим пользователем tg

3. Работа с контактами

  • /add_contact - добавить контакт
  • /import_contacts - добавить контакты из .vcf файла
  • /view_contacts - просмотреть сохраненные контакты
  • /export_contacts - записать все контакты в .vcf файл
  • /remove, /remove_all - удалить конкретный контакт и все контакты соответственно
  • /send, /send_all - поделиться несколькими или всеми контактами с другим пользователем tg

4. Работа с заметками

  • /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

Установка и запуск

1. Получение api токена

Для начала нужно получить токен у Bot Father. Здесь можно почитать про то, как с ним взаимодействовать

2. Установка переменных окружения

Для работы проекта нужно установить переменные 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>"

3. Запуск проекта

Установить все нужные зависимости можно с помощью

pip install -r requirements.txt

После этого проект готов к запуску. Достаточно использовать команду

python3 main.py

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages