diff --git a/event-manager/sample_env b/event-manager/.env.sample similarity index 60% rename from event-manager/sample_env rename to event-manager/.env.sample index b5a95b6..21d7305 100644 --- a/event-manager/sample_env +++ b/event-manager/.env.sample @@ -1,21 +1,17 @@ -# This is the file contains the required tokens. - # DISCORD BOT TOKEN # MUST HAVE PERMISSIONS TO CREATE EVENTS & MANAGE EVENTS # https://discord.com/developers/applications -DISCORD_BOT_TOKEN = "TOKEN" +export DISCORD_BOT_TOKEN = "TOKEN" # ----------- # DISCORD SERVER ID (GUILD ID) # developersIndia => 1229786646468362260 - -DISCORD_GUILD_ID = 1229786646468362260 +export DISCORD_GUILD_ID = 1229786646468362260 # ----------- # CALANDER ID # developersIndia => "9f1337e4154910eb1bdb3bfac32b88f69546468b1281a6db58f50a909df5049f@group.calendar.google.com" - -GOOGLE_CALENDAR_ID = "9f1337e4154910eb1bdb3bfac32b88f69546468b1281a6db58f50a909df5049f@group.calendar.google.com" +export GOOGLE_CALENDAR_ID = "9f1337e4154910eb1bdb3bfac32b88f69546468b1281a6db58f50a909df5049f@group.calendar.google.com" diff --git a/event-manager/README.md b/event-manager/README.md index 506bb05..236835f 100644 --- a/event-manager/README.md +++ b/event-manager/README.md @@ -1,43 +1,47 @@ -# Automation to create events across channels (google calendar & discord) -#### by [Rancho-rachit](https://github.com/Rancho-rachit) +# Automation to create events across Google Calendar & Discord ---- -### Description: +## Description -This script creates events across - -1. [Google Calendar](https://developersindia.in/events-calendar/) -2. [Discord](https://discord.com/channels/669880381649977354/) +This script creates events across [Google Calendar](https://developersindia.in/events-calendar/) & [Discord](https://discord.com/channels/669880381649977354/) ---- +### First Time Setup -### FIRST TIME SETUP +1. Get Python3 -1. Get Python3 `sudo apt-get install python3 && python3 --version` + ```bash + sudo apt-get install python3 && python3 --version + ``` -2. Install required packages `pip install -r requirements.txt` +2. Install required packages + + ```bash + pip install -r requirements.txt + ``` 3. Add respective tokens in the `.env` file - 3.1 Discord Bot token [`DISCORD_BOT_TOKEN`] (Get it from [Discord Developers portal](https://discord.com/developers/applications/)) (bot must have MANAGE_EVENT & CREATE_EVENT permission) + ```bash + cp .sample.env .env + ``` - 3.2 Guild ID [`DISCORD_GUILD_ID`] (developersIndia => `1229786646468362260`) + 1. `DISCORD_BOT_TOKEN` + - Get it from [Discord Developers portal](https://discord.com/developers/applications/)) (bot must have MANAGE_EVENT & CREATE_EVENT permission) - 3.3 calendar Id [`GOOGLE_calendar_ID`] (developerIndia => `9f1337e4154910eb1bdb3bfac32b88f69546468b1281a6db58f50a909df5049f@group.calendar.google.com`) + 2. `DISCORD_GUILD_ID` + - developersIndia's GUID is `1229786646468362260` + + 3. `GOOGLE_CALENDAR_ID` + - developersIndia calendar is public, `9f1337e4154910eb1bdb3bfac32b88f69546468b1281a6db58f50a909df5049f@group.calendar.google.com` 4. Connect Google calendar through [Google cloud Console](https://console.cloud.google.com/) + 1. 4.1 Create a Project on Google Cloud Console + 2. Search for calendar API and enable it + 3. Create Credentials -> OAuth Client ID -> Application type as Desktop + 4. Download the JSON file + 5. Rename that JSON file as `credentials.json` and save it to the project directory. - 4.1 Create a Project on Google Cloud Console - - 4.2 Search for calendar API and enable it - - 4.3 Create Credentials -> OAuth Client ID -> Application type as Desktop - - 4.4 Download the Json file - - 4.5 Rename that JSON file as `credentials.json` and save it to the project directory. - -5. `python3 main.py` +5. `python3 main.py` --- @@ -46,5 +50,3 @@ This script creates events across - > - Google authenication is required for the first time. > > - A file `token.json` will be downloaded automatically, and no web login will be needed afterwards. - - diff --git a/event-manager/discord_.py b/event-manager/discord_bot.py similarity index 57% rename from event-manager/discord_.py rename to event-manager/discord_bot.py index 8b16ca4..67a040e 100644 --- a/event-manager/discord_.py +++ b/event-manager/discord_bot.py @@ -2,11 +2,19 @@ from datetime import datetime, timedelta import discord from discord.ext import commands -def create_discord_event(bot_token, guild_id, - EVENT_NAME, EVENT_DESCRIPTION, EVENT_LOCATION, EVENT_DATE, EVENT_START_TIME, EVENT_END_TIME + +def create_discord_event( + bot_token, + guild_id, + EVENT_NAME, + EVENT_DESCRIPTION, + EVENT_LOCATION, + EVENT_DATE, + EVENT_START_TIME, + EVENT_END_TIME, ): - bot = commands.Bot(command_prefix='!', intents=discord.Intents.all()) + bot = commands.Bot(command_prefix="!", intents=discord.Intents.all()) @bot.event async def on_ready(): @@ -19,29 +27,31 @@ def create_discord_event(bot_token, guild_id, end_time_object = datetime.strptime(EVENT_END_TIME, "%H:%M") # Combine the date and time objects - st = date_object.replace(hour=start_time_object.hour, minute=start_time_object.minute).astimezone() - et = date_object.replace(hour=end_time_object.hour, minute=end_time_object.minute).astimezone() + st = date_object.replace( + hour=start_time_object.hour, minute=start_time_object.minute + ).astimezone() + et = date_object.replace( + hour=end_time_object.hour, minute=end_time_object.minute + ).astimezone() gg = bot.get_guild(guild_id) try: event = await gg.create_scheduled_event( - name=EVENT_NAME, - entity_type=discord.EntityType.external, + name=EVENT_NAME, + entity_type=discord.EntityType.external, description=EVENT_DESCRIPTION, start_time=st, - end_time=et, - location=EVENT_LOCATION, + end_time=et, + location=EVENT_LOCATION, privacy_level=discord.PrivacyLevel.guild_only, - ) + ) print("Discord Event: ", event.url) - + except Exception as e: print(e) - + await bot.close() - + # Run the bot bot.run(bot_token) - -# END \ No newline at end of file diff --git a/event-manager/google_calendar.py b/event-manager/google_calendar.py new file mode 100644 index 0000000..f1e432c --- /dev/null +++ b/event-manager/google_calendar.py @@ -0,0 +1,58 @@ +import os.path + +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from google_auth_oauthlib.flow import InstalledAppFlow +from googleapiclient.discovery import build + +SCOPES = ["https://www.googleapis.com/auth/calendar"] + + +def create_google_calendar_event( + calendar_id, name, description, location, date, start_time, end_time +): + + creds = None + + # The file token.json stores the user's access and refresh tokens + if os.path.exists("token.json"): + creds = Credentials.from_authorized_user_file("token.json", SCOPES) + + # If there are no (valid) credentials available, let the user log in. + if not creds or not creds.valid: + if creds and creds.expired and creds.refresh_token: + creds.refresh(Request()) + else: + print("Login to your Google account. [THIS IS A ONE TIME PROCESS]") + flow = InstalledAppFlow.from_client_secrets_file("credentials.json", SCOPES) + creds = flow.run_local_server(port=0) + # Save the credentials for the next run + with open("token.json", "w") as token: + token.write(creds.to_json()) + + try: + service = build("calendar", "v3", credentials=creds) + start = f"{date}T{start_time}:00" + end = f"{date}T{end_time}:00" + event = { + "summary": name, + "location": location, + "description": description, + "start": { + "dateTime": start, + "timeZone": "Asia/Kolkata", + }, + "end": { + "dateTime": end, + "timeZone": "Asia/Kolkata", + }, + } + + event = service.events().insert(calendarId=calendar_id, body=event).execute() + + print("Google calendar: %s" % (event.get("htmlLink"))) + return event + + except Exception as e: + print(e) + return None \ No newline at end of file diff --git a/event-manager/google_calendar_.py b/event-manager/google_calendar_.py deleted file mode 100644 index ec998c0..0000000 --- a/event-manager/google_calendar_.py +++ /dev/null @@ -1,58 +0,0 @@ -import os.path - -from google.auth.transport.requests import Request -from google.oauth2.credentials import Credentials -from google_auth_oauthlib.flow import InstalledAppFlow -from googleapiclient.discovery import build - -SCOPES = ['https://www.googleapis.com/auth/calendar'] - -def create_google_calendar_event(calendar_id, name, description, location, date, start_time, end_time): - - creds = None - - # The file token.json stores the user's access and refresh tokens - if os.path.exists('token.json'): - creds = Credentials.from_authorized_user_file('token.json', SCOPES) - - # If there are no (valid) credentials available, let the user log in. - if not creds or not creds.valid: - if creds and creds.expired and creds.refresh_token: - creds.refresh(Request()) - else: - print("Login to your Google account. [THIS IS A ONE TIME PROCESS]") - flow = InstalledAppFlow.from_client_secrets_file( - 'credentials.json', SCOPES) - creds = flow.run_local_server(port=0) - # Save the credentials for the next run - with open('token.json', 'w') as token: - token.write(creds.to_json()) - - try : - service = build('calendar', 'v3', credentials=creds) - start = f"{date}T{start_time}:00" - end = f"{date}T{end_time}:00" - event = { - 'summary': name, - 'location': location, - 'description': description, - 'start': { - 'dateTime': start, - 'timeZone': 'Asia/Kolkata', - }, - 'end': { - 'dateTime': end, - 'timeZone': 'Asia/Kolkata', - }, - } - - event = service.events().insert(calendarId=calendar_id, body=event).execute() - - print('Google calendar: %s' % (event.get('htmlLink'))) - return event - - except Exception as e: - print(e) - return None - -# END \ No newline at end of file diff --git a/event-manager/main.py b/event-manager/main.py index 1cb2a34..cfa405a 100644 --- a/event-manager/main.py +++ b/event-manager/main.py @@ -21,11 +21,9 @@ def get_input(): EVENT_NAME, EVENT_DESCRIPTION, EVENT_LOCATION, EVENT_DATE, EVENT_START_TIME, EVENT_END_TIME = get_input() # Execute create_discord_event -from discord_ import create_discord_event +from discord_bot import create_discord_event create_discord_event(bot_token, guild_id, EVENT_NAME, EVENT_DESCRIPTION, EVENT_LOCATION, EVENT_DATE, EVENT_START_TIME, EVENT_END_TIME) # Execute google_calendar_event -from google_calendar_ import create_google_calendar_event -create_google_calendar_event(calendar_id, EVENT_NAME, EVENT_DESCRIPTION, EVENT_LOCATION, EVENT_DATE, EVENT_START_TIME, EVENT_END_TIME) - -# END \ No newline at end of file +from google_calendar import create_google_calendar_event +create_google_calendar_event(calendar_id, EVENT_NAME, EVENT_DESCRIPTION, EVENT_LOCATION, EVENT_DATE, EVENT_START_TIME, EVENT_END_TIME) \ No newline at end of file diff --git a/event-manager/requirements.txt b/event-manager/requirements.txt index 7763c48..c5ce855 100644 --- a/event-manager/requirements.txt +++ b/event-manager/requirements.txt @@ -1,4 +1,5 @@ discord.py google-api-python-client google-auth-httplib2 -google-auth-oauthlib \ No newline at end of file +google-auth-oauthlib +python-dotenv \ No newline at end of file