Некоторое время назад я столкнулась с проблемой ведения двух календарей: личного и рабочего. Точнее само ведение (планирование встреч, переносы, редактирование и т.п.) проблемы не вызывало, но я осознала, что в ежедневной суете у меня совершенно нет возможности / желания несколько раз залезать в календарь и проверять предстоящие встречи.
Естественно, я объединила оба календаря, дала права доступа через оба аккаунта на возможность видеть встречи друг друга, с учетом того, чтобы мой личный календарь не был виден аккаунтам, которые просматривают рабочий календарь, то бишь коллегам, заказчикам и прочим.
Но все равно я периодически пропускала уведомления о начале какого-либо события.
В общем, я пришла к тому, что мне лично очень удобно все делать через телеграм и было бы неплохо иметь бота, который присылал бы мне сообщение со ссылкой на встречу за 5-10 минут. Для меня лично это стало лучшим решением, которым я пользуюсь несколько месяцев и до сих пор не вижу дроубеков вообще.
Календарь для Телеграм бота
Таким образом, я продолжаю пользоваться календарем: в личный календарь я вношу конфы и митинги по личным интересам, плюс онлайн-уроки; в рабочем планы строят обычно коллеги, что позволяет мне вообще его не открывать. Телеграм бот в свою очередь присылает полный план встреч на день и каждую отдельную встречу непосредственно перед началом из обоих календарей.
Реализация
Первым делом нужно обозначить видимость для обоих календарей. Для этого просто подписываемся на каждый из календарей из обоих аккаунтов по кнопке Добавить другой календарь
Далее выбираем Подписаться на календарь и вводим почту, на кого подписываемся. Я не буду подробно здесь останавливаться, возможно нужны дополнительные пермишены и подтверждения, но я уверена, что вы справитесь.
Как только видимость из обоих календарей настроена можно переходить к написанию кода. Моменты с созданием бота и проектом в App Script уже были обговорены здесь, поэтому сразу перейду к ключевым функциям.
Получение всех событий из календаря
В App Script есть класс CalendarApp , в котором мы используем метод getCalendarById(calendar_id) , calendar_id — это ваш gmail login.
Таким образом я сохраняю оба календаря в соответствующие переменные:
const calendar_ct = CalendarApp.getCalendarById(gmail_login_1) const calendar_ns = CalendarApp.getCalendarById(gmail_login_2)
Далее отфильтрую все события по дате, я хочу получить планы только на сегодня и использую метод getEventsForDay(date) . Также записываю их в переменные
const now = new Date(); const events_ct = calendar_ct.getEventsForDay(now); const events_ns = calendar_ns.getEventsForDay(now);
Полученные массивы просто объединяем в один методом concat() . При обращении к элементу массива мы увидим в консоли CalendarEvent . Чтобы вычленить подробности из CalendarEvent , нужно обратиться к каждому элементу и забрать нужную инфу, например, название, время начала, описание.
Для данного набора запрашиваемой информации мне нужно использовать методы getDescription(), getTitle(), getStartTime().
Помимо получения деталей события я их преобразую в нужный мне вид. Например, getStartTime() возвращает мне дату целиком и возвращаемое время не соответствует моему часовому поясу. Учитывая, что я хочу получить только время вида чч:мм, я преобразую время следующим образом
start_time = new Date(start_time.getTime() + (6 * 60 * 60 * 1000)) //6 — разница во времени между NY и Berlin
С описанием из события в календаре тоже не все так просто. При выводе в консоль я получаю не текст или ссылку в виде текста, как я ожидала, а текст и ссылки заключенные в теги.
И проблема заключается в отправке в телеграм. Чтобы все обработалось гладко и сообщение выглядело примерно следующим образом
я применила замену (я просто остановилась на решении, которое работает, не вдаваясь в детали) :
const regExp = /<(?!/?a>|/?a href|/?br)[^>]+>/g; descr = descr.replace(regExp,»).replace(/
/g,`n`).replace(/ /g,’ ‘);
Все выбранные и преобразованные данные я вставила в новый массив для дальнейшей работы уже с ним. Вся функция целиком ниже.
Да, здесь же я сортирую события по возрастанию времени их старта.
Отдельно я написала функцию, которая преобразует время в удобоваримый вид
Отправка в телеграм
Наконец, функции отправки в чат с ботом. Я разделила отправку на 2 отдельные функции: 1-я отправляет одно событие в чат за 5-8 минут до начала, 2-я отправляет все события списком в одном сообщении по порядку следования.
function send_next_event() < const today_events_arr = getEvents(); const cur_time = new Date(new Date().getTime() + (6 * 60 * 60 * 1000)) //6 — разница во времени между NY и Berlin let msg = new String(); for (i=0; i0.1) < today_events_arr[i][1] = time_to_string(today_events_arr[i][1]); if (msg == «») < msg = `$` > else < msg = `$n$` > send(msg,chat_id_root,API); > > >
Функция send_next_event() проверяет разницу между текущим временем и стартовым временем каждого из событий в массиве и отправляет сообщение в чат ( send(msg,chat_id_root,API) ) примерно за 5 минут.
Понимаю, здесь очень странные манипуляции со значением времени, но вот так это выглядит в js. Я сама еще в этом плаваю, потому не хочу объяснять все детали, т.к. сама искала ответы онлайн касаемо этой части. В целом, идея была преобразовать время из 1.65286722566E12 во время вида 13:00 .
Функция для отправки всех событий представлена ниже.
function send_all_events() < const today_events_arr = getEvents(); let msg = new String(); if (today_events_arr.length !== 0) < today_events_arr.forEach((el,ind) => < el[1] = time_to_string(el[1]) if (msg == «») < msg = `$$` > else < msg = `$n$ $` > >) send(msg, chat_id_root, API); > else < send(‘В календаре нет планов’, chat_id_root, API); >>
Функция активируется по триггеру каждое утро, а также я могу запустить ее по команде из бота.
Слева на скрине примеры сообщений, которые я получаю от бота в течение дня. При этом описание в календаре есть только у второго события.
Заключение
Вот такой Reminder bot уровня минимум спасает меня каждый день. Как обычно буду рада вашим комментам и вопросам. Весь код целиком есть на гите, который я вот только начала вести (https://github.com/Nadezhda95).
Всем добра и нет войне.
Источник: temofeev.ru
Telegram bot: как создать календарь?
Telegram — одно из самых популярных мессенджеров в мире, и одной из его самых замечательных особенностей является возможность создания ботов. Боты — это программы, которые могут взаимодействовать с пользователями, предоставлять им информацию и выполнять различные действия. Один из интересных способов использования ботов Telegram — создание календаря. В этой статье я покажу вам, как создать календарь в Telegram с помощью бота.
Вам также потребуется компьютер с установленными Python и несколько пакетов, которые мы будем использовать в нашем боте. Для установки этих пакетов откройте командную строку и выполните следующие команды:
pip install python-telegram-bot pip install python-dateutil
Python-telegram-bot — это пакет Python, который предлагает простой и интуитивно понятный API для работы с Telegram ботами. Python-dateutil — это пакет Python для удобной работы с датами и временем.
Теперь, когда мы установили все необходимые компоненты, мы можем приступить к созданию нашего календаря. Начнем с импорта необходимых модулей и создания экземпляра класса `Updater` из модуля `telegram.ext`:
from telegram.ext import Updater, InlineQueryHandler, CommandHandler import datetime from dateutil import parser updater = Updater(token=’YOUR_API_TOKEN’, use_context=True) dispatcher = updater.dispatcher
Теперь, когда мы создали наш экземпляр класса `Updater`, мы можем добавить обработчики команды /calendar и /event. Обработчик команды /calendar будет вызываться, когда пользователь отправит команду /calendar, и добавлять Inline-клавиатуру с днями недели:
keyboard = [ [InlineKeyboardButton(«Monday», callback_data=’monday’), InlineKeyboardButton(«Tuesday», callback_data=’tuesday’), InlineKeyboardButton(«Wednesday», callback_data=’wednesday’), InlineKeyboardButton(«Thursday», callback_data=’thursday’), InlineKeyboardButton(«Friday», callback_data=’friday’), InlineKeyboardButton(«Saturday», callback_data=’saturday’), InlineKeyboardButton(«Sunday», callback_data=’sunday’)] ] reply_markup = InlineKeyboardMarkup(keyboard) def calendar(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text=»Please select a day:», reply_markup=reply_markup) calendar_handler = CommandHandler(‘calendar’, calendar) dispatcher.add_handler(calendar_handler)
В коде выше мы создали массив кнопок Inline-клавиатуры и добавили обработчик команды /calendar, который будет вызывать функцию `calendar`. Функция `calendar` отправляет сообщение пользователю с текстом «Please select a day:» и подключает Inline-клавиатуру.
Теперь мы можем добавить обработчик для каждого дня недели. Обработчик будет вызываться, когда пользователь выбирает один из дней недели:
def day(update, context): query = update.callback_query selected_day = query.data context.bot.send_message(chat_id=update.effective_chat.id, text=»You’ve selected <>».format(selected_day)) # You can add your own logic here to do something with the selected day day_handler = CallbackQueryHandler(day) dispatcher.add_handler(day_handler)
В коде выше мы создали функцию `day`, которая получает выбранный день недели и отправляет сообщение пользователю с выбранным днем. Вы можете добавить свою собственную логику здесь, чтобы выполнить какие-либо действия с выбранным днем.
Наконец, мы можем запустить нашего бота добавлением следующих строк кода в конце файла:
updater.start_polling() updater.idle()
Весь код описанный выше реализует функциональность календаря в Telegram боте. Когда пользователь отправляет команду /calendar, он получает Inline-клавиатуру с днями недели. Пользователь может выбрать один из дней, и выбранный день будет отображаться в виде сообщения. Вы можете добавить свою собственную логику для обработки выбранного дня, чтобы сделать бота еще более полезным.
В этой статье мы рассмотрели, как создать календарь в Telegram с помощью бота. Мы использовали популярный пакет python-telegram-bot для создания бота и добавили инлайн-клавиатуру с днями недели для выбора дня. Вы можете доработать бота, чтобы он выполнял дополнительные функции и помогал пользователям с организацией своего времени.
Источник: qaa-engineer.ru
Бот телеграмм напоминалка
Боты телеграмм-напоминалки помогут организовать свою жизнь, успеть, не забыть, не пропустить… Однозначно полезные боты, и бесплатная напоминалка появится в вашем устройстве легко и просто с помощью telegram.
Бот телеграмм — напоминалка
Управляет списком дел, умеет сохранять ссылки и заметки. Раз в день в назначенное время выдает список всех незакрытых на сегодня задач
Он позволяет настроить время, когда робот пришлет пользователю напоминание. Можно использовать бот вместо стандартного будильника либо в качестве органайзера.
Бот, знающий все праздники и события, с которыми связан сегодняшний день
Узнавайте праздники, исторические события и именины со всего мира каждый день.
Бот напомнит о всех запланированных делах
Секундомер на телеграмм
Если вы знаете хорошего бота телеграмм (любого) — отправьте нам его с помощью формы, будем благодарны и дополним список!
Знаю хорошего бота для телеграмм!
[cforms name=»bot»]
Источник: inetru.net