{"id":17689970,"url":"https://github.com/pystardust/automeet","last_synced_at":"2026-01-08T06:42:13.386Z","repository":{"id":103487311,"uuid":"339844522","full_name":"pystardust/automeet","owner":"pystardust","description":"Join online classes automatically","archived":false,"fork":false,"pushed_at":"2021-02-17T20:23:33.000Z","size":2,"stargazers_count":26,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-06T02:44:35.835Z","etag":null,"topics":["calcurse"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pystardust.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-17T20:15:38.000Z","updated_at":"2024-05-16T23:10:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"e08a5507-f84e-4e6b-914f-f8ca6e699a36","html_url":"https://github.com/pystardust/automeet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystardust%2Fautomeet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystardust%2Fautomeet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystardust%2Fautomeet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystardust%2Fautomeet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pystardust","download_url":"https://codeload.github.com/pystardust/automeet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246385415,"owners_count":20768672,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["calcurse"],"created_at":"2024-10-24T11:49:29.803Z","updated_at":"2026-01-08T06:42:13.359Z","avatar_url":"https://github.com/pystardust.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Automeet\nAutomatically join online classes.\n\nMany of us need to attend classes online, and finding the right url for each class and clicking on it at the appropriate time is such a pain (I am too lazy to do all that).\n\nSo here is a solution I found out to make my life a little easier.\nI started using **calcurse** to maintain my class time table. It is a beautiful tui application which manages events and todos. It has this amazing feature to run a command just before an event start. The default command would send a notification regarding the upcoming event. But this command can be changed to anything. Changing this command to open the class url would automatically open the class for you.\n\n# Requirements\n* calcurse\n\n# Procedure\n\n#### Adding Timetable\n\n* Added each class as a recurring event in calcurse with the title having the class name and the class url as follows\n```\nTopology \u003cTab Space\u003e https://meet.google.com/url123\n```\n\n#### Setting up script to open url\n* Now when I run calcurse --next from the command line I get output as follows\n```\n$ calcurse --next                                                \nnext appointment:\n   [08:26] Topology\t\thttps://meet.google.com/url123\n```\n\u003e This means the next class is topology and it is in 8hr 23min and the joining link is that.\n\n* Here is a small script that would notify about the next event and also open the url if it exists.\n```\n#!/bin/sh\n\nbrowser=\"brave\"\nevent=\"$(calcurse --next | sed \"1d\")\"\nname=\"$(echo \"$event\" |  sed -E 's/.*\\] ([^\\t]*).*/\\1/')\"\nurl=\"$(echo \"$event\" | grep -o \"http\\S*\" )\"\n\nif [ -z \"$url\" ] \nthen\n\tnotify-send \"$name\"\nelse\n\tnotify-send \"$name\" \"opening link...\" \n\teval $browser $url 1\u003e/dev/null 2\u003e\u00261 \u0026 \nfi\n```\nSave this as an executable somewhere\n\n#### Configuring Calcurse to run the script\nNow all that is left to do is to configure calcurse to run this script 15 seconds before the event starts. \n* Add the following lines to calcurse config file (~/.cache/calcurse/conf).\n```\nnotification.command= /home/user/path/to/this/script\nnotification.notifyall=all\nnotification.warning=15\n```\nAnd there we have it. Now whenever calcurse is open (or launched as daemon), all your classes will be automatically opened in the browser.\n\n## Extra\n\n* If you are really adventurous there are browser plugins that automatically mute, switch off camera and auto join you into google meet.\n* I also add the following as a module in my status bar script to show when I have my next class.\n```\nevent=\"$(calcurse -n | sed 1d | sed -E \"s_^ *\\[(.*):(.*)\\] ([^\\t]*)\\t?.*_[\\1h \\2m-\u003e\\3]_\")\" \n```\nThis would give an output as *07h 27m -\u003e Topology*.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpystardust%2Fautomeet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpystardust%2Fautomeet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpystardust%2Fautomeet/lists"}