gelin / calendar-bot

Telegram bot to post events notifications from calendars
GNU General Public License v3.0
29 stars 8 forks source link

Calendar Bot

It's the bot for Telegram.

It reads iCalendar files of Google Calendar (or any other public iCal URLs). And sends notifications to a telegram channel some hours in advance to the events start in the calendar. Use it to mirror calendar events to the channel and notify the subscribers.

Quick Start

  1. Start talk with @icalbot.
  2. Invite @icalbot to your channel and make it the channel administrator (to allow it to post messages to the channel).
  3. Find the URL of your iCalendar file (ICAL link).
  4. Type /add, then, after prompts, enter https://your_calendar.ics and @your_channel (setting your actual data) in the chat with the bot.
  5. Wait for bot notifications in the chat and in the channel.

Bot Commands

/add

/add — add a new iCal to be sent to a channel

Adds the new calendar to be processed by the bot and be broadcasted to the channel.

You should enter two parameters after prompts, one by one:

For example:

You're going to add a new calendar.
Enter an URL of iCal file or /cancel

And then:

Enter a channel name or /cancel
Channel name should start with @.

/list

/list — see all configured calendars

Prints a table with calendar ID, calendar name and the broadcast channel with all calendars you configured with the bot. For example:

ID    NAME               CHANNEL
/cal1 My Google Calendar @mychannel
/cal2 Another Calendar   @anotherchannel

/calN

/cal<ID> — see calendar details, edit, disable, or delete it if necessary

Show details of the specified calendar from the list. Allows to modify, disable, or delete it. For example:

Calendar 1 details
Name: My Google Calendar
URL: https://calendar.google.com/calendar/ical/XXXXXXXXXXXXXX/public/basic.ics
Channel: @mychannel
Verified: True
Enabled: True
Last processed: 2022-01-07T11:55:09.762176
Last error: None
Errors count: 0

Edit the calendar /url or /channel, or /disable it, or /delete, or /cancel

You can type /url and enter a new URL to the iCal file after the prompt. For example:

The current calendar URL is:

https://calendar.google.com/calendar/ical/XXXXXXXXXXXXXX/public/basic.ics

Enter a new URL of iCal file or /cancel

You can type /channel and, after the prompt, enter a new channel name where to send the calendar event. For example:

The current calendar channel is:

@mychannel

Enter a new channel name or /cancel

After changing of the URL or channel name the calendar is verified again, as it happens when adding a new calendar.

You can /enable or /disable the calendar or /delete it permanently by typing the specific command.

/format

/format — get and set a calendar event formatting, use {title}, {date}, {time}, {location} and {description} variables

The command prints the current format of the calendar event and asks the new format to set. For example:

Current format:

{title}
{date:%A, %d %B %Y}{time:, %H:%M %Z}
{location}
{description}

Sample event:

This is sample event
Friday, 09 September 2016, 14:43 UTC
It happens in Milky Way
The sample event is to demonstrate how the event can be formatted

Type a new format string to set or /cancel

Type the new format template and send it. See below the details of the formatting.

/lang

/lang — get and set language to print the event, may affect the weekday / month name

The command prints the current language and asks the new language to set. For example:

Current language: ru_RU.UTF-8
Sample event:

This is sample event
Пятница, 23 Сентябрь 2016, 18:03 UTC
It happens in Milky Way
The sample event is to demonstrate how the event can be formatted

Type another language name to set or /cancel

Enter the language name to set the new language. The language can be two letter code ('ru') or the full name ('russian'). Not all languages are supported by the bot.

/advance

/advance — get and set calendar events advance, i.e. how many hours before the event to publish it

The bot broadcasts the event from the calendar to the channel some hours in advance before the event starts. How many hours in advance to notify can be configured by this command. It's possible to define multiple advance hours, in this case the same event will be notified multiple times.

The command prints the current advance hours and asks new values to update. For example:

Events are notified 24, 12 hours in advance.

Type how many hours in advance events should be notified. Several intervals can be entered separated by space.

Example:
48 24 12 6

Enter /cancel to cancel update.

Enter one or more space separated integer numbers to set the new notification advance. Each number means hours to advance.

Event Formatting

Event has some properties. To print the property during the event broadcasting you should include the property name to the format string in curly braces. The format string can be modified using /format command (see above). It uses the syntax of Python's str.format() method. Date and time are formatted according to strftime() rules.

Event properties: