Code Monkey home page Code Monkey logo

teams-auto-joiner's Introduction

Teams-Auto-Joiner

GitHub stars Donate

Python script to automatically join Microsoft Teams meetings. Automatically turns off your microphone and camera before joining. Automatic login and blacklist can be set in the config file.

Always joins the newest meeting and leaves either after a specified time, if you are the last person in the meeting or only if a new one is available (see Configuration options for more information). I also made a short tutorial video on how to setup the bot: https://youtu.be/YgkSOqfIjf4

Demo

Maintenance status

This project is not actively maintained by me anymore, therefore I cannot guarantee it still working. Feel free to fork this repository or submit Pull requests.

Prerequisites

Configuration options

  • email/password:
    The email/password of your Microsoft account. In case you don't want to store your credentials on disk, you can leave any of them empty and you will be prompted to enter them. If you leave them empty in the prompt too, you will have to enter them in the browser.

  • run_at_time:
    Time to start the script at. Input is a string of the hour and minute in 24h format, if you want it to start immediately leave this empty. If a time before the current time is given, the next day is used. Also make sure that you entered your email and password. For example, if you want the script to start searching meetings at 6 in the morning on the next day, you would input 06:00 in the config.

  • meeting_mode: Change which meetings should be joined. Modes 1, 2 and 3 are available.
    1 Both channel and calendar meetings
    2 Only channel meetings
    3 Only calendar meetings

  • organisation_num: If your Teams account is in multiple organisations, as seen in the example below, change the organisation_num to the number of the list item (counting starts from 0), set to -1 to never change organisation.

  • random_delay: Adds a random delay (random integer between the two parameters, in seconds) before joining a meeting. Can be useful so the bot seems more "human like" or to avoid being one of the first few people to join a meeting. For a fixed delay, set both parameters to the same Integer.
    eg: [30,30] will add a fixed delay of 30s before joining the meet.

  • check_interval: The amount of seconds to wait before checking for meetings again. Only integer numbers greater than 1 are allowed.

  • join_message: A chat message sent when a meeting is joined.

  • auto_leave_after_min: If set to a value greater than zero, the bot leaves every meeting after the specified time (in minutes). Useful if you know the length of your meeting, if this is left a the default the bot will stay in the meeting until a new one is available.

  • leave_if_last: If true, leaves the meeting if you are the last person in it.

  • leave_threshold_number: Sets the threshold for people to leave the meeting before the bot leaves the meeting.
    For example:
    Peak members of meeting: 20
    Current members of meeting: 5
    Leave threshold set to 15
    Because 15 people have left the meeting, the bot leaves.
    (Must enable leave_if_last for this to work)

  • leave_threshold_percentage: Sets the threshold percentage of people still in the meeting before auto leaving. The same as leave_threshold_number but with percentage of the current members to the peak.
    (Must enable leave_if_last for this to work)

  • pause_search: If true, doesn't search for new meetings while there is one active. Keep in mind to set auto_leave_after_min or leave_if_last, otherwise the bot will not search for meetings again.

  • headless: If true, runs Chrome in headless mode (does not open GUI window and runs in background).

  • mute_audio: If true, mutes all sound output of the browser. This doesn't effect your microphone.

  • chrome_type: Valid options: google-chrome, chromium, msedge. By default, google chrome is used, but the script can also be used with Chromium or Microsoft Edge.

  • blacklist: A list of Teams and their channels to ignore. Meetings ocurring in these channels will not be joined. If you have a Team called "Test1" and, within that, two channels called "General" and "Channel1" and you don't want to join meetings in the "General" Channel:

    "blacklist": [
      {
        "team_name": "Test1",
        "channel_names": [
          "General"
        ]
      }
    ]

    If you want to blacklist all the channels in a team, leave the square brackets empty: "channel_names": [].

  • blacklist_meeting_re: If calendar meeting title matches a regular expression, it goes to blacklist. Leave empty to attend to all calendar meetings.

  • discord_webhook_url: For getting Discord notifications you have to specify a Discord webhook url.

    "discord_webhook_url" : "your_discord_channel_webHook_url" 

Run the script

  1. Rename the config.json.example file to "config.json"
  2. Edit the "config.json" file to fit your preferences (optional)
  3. Install dependencies: pip install -r requirements.txt
  4. Run auto_joiner.py: python auto_joiner.py
  5. After starting, teams might be in Grid view, if this is the case change the view to list (How to do)

teams-auto-joiner's People

Contributors

a1batross avatar aryanashar avatar ayaan2907 avatar casualinformee avatar chromedays avatar h4d53 avatar jevonmao avatar keshavbantu avatar m-adawi avatar piran-k avatar radiantly avatar sauravdharwadkar avatar tobiaspankner avatar vaibhavvikas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

teams-auto-joiner's Issues

Error when trying to start script "ValueError: invalid literal for int() with base 10: 'None'"

Hi, I am trying to run the script using your last build, running via CMD admin/Windows 10/Edge mode. Running the latest PIP. Any idea why I am getting this error message?

C:*\Teams-Auto-Joiner-master>python auto_joiner.py
Traceback (most recent call last):
File "auto_joiner.py", line 636, in
main()
File "auto_joiner.py", line 504, in main
init_browser()
File "auto_joiner.py", line 173, in init_browser
browser = Edge(EdgeChromiumDriverManager().install(), options=chrome_options)
File "C:\Users*
\AppData\Local\Programs\Python\Python38\lib\site-packages\webdriver_manager\microsoft.py", line 45, in install
return self.download_driver(self.driver)
File "C:\Users*\AppData\Local\Programs\Python\Python38\lib\site-packages\webdriver_manager\manager.py", line 44, in download_driver
path = self.__download_and_save_driver_to_cache(driver, driver_version)
File "C:\Users*
\AppData\Local\Programs\Python\Python38\lib\site-packages\webdriver_manager\manager.py", line 32, in __download_and_save_driver_to_cache
response = download_driver(driver.get_url(driver_version))
File "C:\Users*\AppData\Local\Programs\Python\Python38\lib\site-packages\webdriver_manager\utils.py", line 58, in download_driver
log(f"Trying to download new driver from {url}")
File "C:\Users*
\AppData\Local\Programs\Python\Python38\lib\site-packages\webdriver_manager\logger.py", line 12, in log
level = int(log_level)
ValueError: invalid literal for int() with base 10: 'None'

Assignments Tab Opening by default

Bug Description
After configuring the config.json, when we run auto_joiner.py. It opens the assignment tab by default as a result it keeps on waiting on that screen and is unable to fetch team names and details etc. and throws the error Timeout waiting for element: .use-app-lnk. We have to manually click on the Teams tab to open our app.

To Reproduce
Steps to reproduce the behavior:

  1. Configure the config.json
  2. Run auto_joiner.py
  3. After automatic login, the app keeps on waiting
  4. See error

Expected behavior
The app must open Teams tab and scan channels and teams automatically

Screenshots
1
2

Desktop (please complete the following information):

  • OS: Windows 10 x64 20H2
  • Browser: Chrome
  • Version 84.0.4147

Workaround.
We have to click on the teams tab. Then the app scans the teams and we can join the meeting automatically

I have made an auto re run .sh file.

So sometimes it crashes due to selector issues.
Works fine if I re run it fo that I made this .sh file to re run might be helpful for other people

#!/bin/bash    
t=1
while [ $t -ne 0]
do
   python3 auto_joniner.py
   t=$?
done

Then just :
chmod +x autorun.sh
./autorun.sh

So you don't have to worry about the unexpected crashes!

Automatic Welcome Message

Is your feature request related to a problem? Please describe.
Teachers say good mornin, you dont answer

Describe the solution you'd like
Just allow the user to play a mp3 file, which he has recorded before, or just send a message in chat

Additional context
I think it should be easy to implement, only took me 5 minutes to get it working, the only tricky thing was muting me again after the sound was played.

leave if participants in a meeting are lower than a threshold

sometimes in a meeting there are kids afk and stay in the meeting for a long time after its over , so could you please add an option where it will auto leave if there are less than 'x' participants( or 'z' percent of total participants )remaining after ' y' time has passed in a meeting

Stop searching for meetings

Hey! I'm having online classes, and there is a problem that when the meetings has started it appears in a minimized window, and the bot keeps searching for classes.

I think it would be pretty nice, if the bot could stop searching when the meeting has started and then run again when the meeting ends.

Custom greeting

Is your feature request related to a problem? Please describe.
My Microsoft Team group always asks if I'm there. I have to say something or type something in the text box.
Describe the solution you'd like
Add another feature easy to edit in the JSON file, where I can type custom greeting, for example, "Hi, I'm there". I think you have to find a message button and text box id (selenium_WebElement).
Send "keys" to it by pulling text from JSON.
Would love to have a GUI so it can be easier for new people.
Describe alternatives you've considered
I only tried bot joining in teams. I think it is easy to find a message-id and sent a text to it.
Additional context
Good luck, if you need to design your GUI in the future, I would love to help you out.

Micheal

[Solved] "chrome_type": "msedge" Not Working

Describe the bug
Script crashes about webdriver_manager

Video
https://youtu.be/Q3W46-GF6IY

Run auto_joiner.py: py -3 auto_joiner.py
Traceback (most recent call last): File "C:\Users\WONGH\Desktop\Teams-Auto-Joiner-master\auto_joiner.py", line 636, in <module> main() File "C:\Users\WONGH\Desktop\Teams-Auto-Joiner-master\auto_joiner.py", line 504, in main init_browser() File "C:\Users\WONGH\Desktop\Teams-Auto-Joiner-master\auto_joiner.py", line 173, in init_browser browser = Edge(EdgeChromiumDriverManager().install(), options=chrome_options) File "C:\Python\Python39\lib\site-packages\webdriver_manager\microsoft.py", line 45, in install return self.download_driver(self.driver) File "C:\Python\Python39\lib\site-packages\webdriver_manager\manager.py", line 44, in download_driver path = self.__download_and_save_driver_to_cache(driver, driver_version) File "C:\Python\Python39\lib\site-packages\webdriver_manager\manager.py", line 32, in __download_and_save_driver_to_cache response = download_driver(driver.get_url(driver_version)) File "C:\Python\Python39\lib\site-packages\webdriver_manager\utils.py", line 58, in download_driver log(f"Trying to download new driver from {url}") File "C:\Python\Python39\lib\site-packages\webdriver_manager\logger.py", line 12, in log level = int(log_level) ValueError: invalid literal for int() with base 10: 'None'

Configuration file

{
  "email": "",
  "password": "",

  "run_at_time": "",

  "meeting_mode": 3,
  "organisation_num" : 1,
  "random_delay": true,
  "check_interval": 20,

  "auto_leave_after_min": -1,
  "leave_if_last": false,

  "headless" : false,
  "mute_audio": true,
  "chrome_type": "msedge",
  
  "blacklist": [
    {
      "team_name": "Example Team 1",
      "channel_names": [
        "First Channel to blacklist in this team",
        "Second Channel to blacklist"
      ]
    },
     {
      "team_name": "Blacklist whole team",
      "channel_names": [
      ]
    }
  ],
  "blacklist_meeting_re": ""
}

Desktop
-Windows 10 x64
-MicrosoftEdge=87.0.664.57
-python=3.9.0

Additional context
please update the requirements.txt

selenium==3.141.0
webdriver_manager==3.2.2
msedge-selenium-tools==3.141.3

Multiple active meetings

Is your feature request related to a problem? Please describe.
Using Teams to automate joining my university classes. One problem which arises is if there are two simultaneous meetings, the bot usually joins the earlier meeting, instead of the later one.

Describe the solution you'd like
Well, it would be great if in the config.json file we could pass an argument as to which meeting we can join.

Describe alternatives you've considered
I have a totally rudimentary idea of python, but would it be possible to segregate the meetings by the time created? Or the current running time? Or maybe the number of participants?
Then, would it be possible to join the meeting with the more recent creation time, or the lesser total running time, or the more number of participants?

cant add dependencies

cant add dependencies
says:

python auto_joiner.py
File "", line 1
python auto_joiner.py
^
SyntaxError: invalid syntax

python auto_joiner.py not working

Describe the bug
I followed all the steps up until typing "python auto_joiner.py". Then the error came. I'm know nearly nothing of python and programming. So could you help a newbie like me?

Here is the errror:
https://imgur.com/a/ztI1Tro

It just blocks here and does nothing.

Configuration file
{
"email": "Removed for explanation purposes",
"password": "Removed for explanation purposes",

"run_at_time": "",

"meeting_mode": 1,
"organisation_num" : 1,
"random_delay": true,
"check_interval": 10,

"auto_leave_after_min": 110,
"leave_if_last": true,

"headless" : false,
"mute_audio": false,
"chrome_type": "google-chrome",

"blacklist": [
{
"team_name": "Lingua giapponese 1 (dalla Chiesa)",
"channel_names": [
"Esercitazioni di lingua giapponese 1 L-Z(Yamasaki)" ]
},
{
"team_name": "Lingua Inglese 1 MED 2020-21",
"channel_names": [
]
}
]
}, {
"team_name": "Lingua Inglese II MED 2020-21",
"channel_names": [
]
}
]
}, {
"team_name": "CULTURA INGLESE I MED. - LEZIONI - AA 2020/21 -",
"channel_names": [
"RANGE A-D. Proff. PASOLINI-VALLORANI",
"RANGE N-Z. Prof MONEGATO" ]
}, {
"team_name": "Lingua Inglese 1 MED 2020-2021 Language Skills B (Grammar Part 2 & Vocabulary)",
"channel_names": [
"Language Skills B Group 1", "Language Skills B Group 3", "Language Skills B Group 4", "Language Skills B Group 5", "Language Skills B Group 6", "Language Skills B Group 7", "Language Skills B Group 8", "Language Skills B Group 9", "Language Skills B Group 10" ]
}, {
"team_name": "Lingua Inglese 1 MED 2020-2021 Language Skills A (Grammar Part 1)",
"channel_names": [
"Language Skills A Group 1", "Language Skills A Group 3", "Language Skills A Group 4", "Language Skills A Group 5", "Language Skills A Group 2", "Language Skills A Group 7", "Language Skills A Group 8", "Language Skills A Group 9", "Language Skills A Group 10" ]
} ] }

Desktop:

  • OS: windows 8.1
  • Browser chrome

Can we run this script in Linux.

All seems working file until it creates Team object with the Id's that it stuck in the loop and do not return the list of Team objects.
Is there any other way around for to run this in linux

Program keeps searching for meetings even after joining and entering one.

This program is near perfect and works beautifully except for the fact that it keeps searching for new meetings in the background despite having found and joined a current meeting. This causes issues like leaving the meeting that it's currently in, joining other random meetings etc. Is there a way you know that can fix this?

It doesn't see the Teams

It works up until it is on the page displaying the Teams I am in.
That is when it exits before checking them. I have tried setting meeting_mode to 1, 2, and 3 although my meetings are mostly channel meetings.

The output:
[WDM] - Current google-chrome version is 87.0.4280
[WDM] - Get LATEST driver version for 87.0.4280
[WDM] - Driver [C:\87.0.4280.88\chromedriver.exe] found in cache

Resized window width
Resized window height
Found page, do not click anything on the webpage from now on.
Not Teams found, is MS Teams in list mode? (switch to mode 3 if you only want calendar meetings)

Crashes after an hour

The bug
Runs perfectly, but after an hour and a half (estimate), and joining 2 classes. This happens in the middle of the 2nd class.
(i have renamed the file for easier run).
Do you know why this happens? I feel like its some power saving sorta stuff on the driver itself?

``
Traceback (most recent call last):

File "join.py", line 63, in expand_channels
elem = self.elem.find_element_by_css_selector("div.channels")
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 430, in find_element_by_css_selector
return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 658, in find_element
return self._execute(Command.FIND_CHILD_ELEMENT,
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div.channels"}
(Session info: headless chrome=84.0.4147.125)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "join.py", line 429, in
main()
File "join.py", line 417, in main
team.update_meetings()
File "join.py", line 99, in update_meetings
channels = self.expand_channels()
File "join.py", line 66, in expand_channels
self.elem.click()
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/bantu/.local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element

...
is not clickable at point (208, 542). Other element would receive the click:
...

(Session info: headless chrome=84.0.4147.125)
``

auto leaves in minutes for some reason.

Describe the bug
The code auto leaves in few minutes

Expected behavior
Should not auto leave
the output

[10:42:37] Looking for new meetings
Found meetings:
DSIP lecture 25 from 08:00 to 09:00 1601519340 [Calendar]
AISC Lecture 32 from 10:20 to 11:20 1601527800 [Calendar]
Joined meeting: AISC Lecture 32 from 10:20 to 11:20

[10:42:49] Looking for new meetings
Found meetings:
DSIP lecture 25 from 08:00 to 09:00 1601519340 [Calendar]
AISC Lecture 32 from 10:20 to 11:20 1601527800 [Calendar]

[10:43:00] Looking for new meetings
Found meetings:
DSIP lecture 25 from 08:00 to 09:00 1601519340 [Calendar]
AISC Lecture 32 from 10:20 to 11:20 1601527800 [Calendar]

[10:43:10] Looking for new meetings
Found meetings:
DSIP lecture 25 from 08:00 to 09:00 1601519340 [Calendar]
AISC Lecture 32 from 10:20 to 11:20 1601527800 [Calendar]

[10:43:21] Looking for new meetings
Found meetings:
DSIP lecture 25 from 08:00 to 09:00 1601519340 [Calendar]
AISC Lecture 32 from 10:20 to 11:20 1601527800 [Calendar]

[10:43:31] Looking for new meetings
Found meetings:
DSIP lecture 25 from 08:00 to 09:00 1601519340 [Calendar]
AISC Lecture 32 from 10:20 to 11:20 1601527800 [Calendar]
Left Meeting: AISC Lecture 32 from 10:20 to 11:20

Configuration file

{
  "email": "X",
  "password": "XX",

  "run_at_time": "",

  "meeting_mode": 3,
  "organisation_num" : 1,
  "random_delay": false,
  "check_interval": 10,

  "auto_leave_after_min": 60,
  "leave_if_last": true,

  "headless" : false,
  "mute_audio": true,
  "chrome_type": "google-chrome",

  "blacklist": [
    {
      "team_name": "Example Team 1",
      "channel_names": [
        "First Channel to blacklist in this team",
        "Second Channel to blacklist"
      ]
    },
     {
      "team_name": "Blacklist whole team",
      "channel_names": [
      ]
    }
  ]
}

Desktop (please complete the following information):

  • Linux
  • Chrome

The Calender feature feteches everything perfectly just auto leaving is the problem!

Joining Teams meetings which are not part of a channel

Hi, got a lot of meetings which are not associated to any Teams channels. Any option to integrate joining meetings which are in the teams calendar but do not belong to a channel?

Thanks, great script, appreciated.

No module named 'webdriver_manager" error

Hey,

I have a problem when i try to execute the python script. Indeed, I have installed every modules but I still have an error message. I've tried to uninstall and reinstall but It is still not working unfortunately...

Here is the error I have!

Traceback (most recent call last): File "auto_joiner.py", line 14, in <module> from webdriver_manager.chrome import ChromeDriverManager ModuleNotFoundError: No module named 'webdriver_manager'

Desktop:

  • OS: Microsoft 10
  • Browser Chrome
  • Version 86.0.4240.183

Thank you very much in advance! Bye

Browser crashing for no reason

The browser sometimes crashes for no reason. I have no idea when or why that happens. It just happens randomly. I never even clicked on the screen. Never clicked on anything after I executed the code.
This is what appears after it crashes :

Traceback (most recent call last):
File "C:\Users\PC.CC\Desktop\My Teams-Auto-Joiner\auto_joiner.py", line 642, in
main()
File "C:\Users\PC.CC\Desktop\My Teams-Auto-Joiner\auto_joiner.py", line 614, in main
members = get_meeting_members()
File "C:\Users\PC.CC\Desktop\My Teams-Auto-Joiner\auto_joiner.py", line 455, in get_meeting_members
browser.execute_script("document.getElementById('roster-button').click()")
File "C:\Users\PC.CC\Desktop\My Teams-Auto-Joiner\selenium\webdriver\remote\webdriver.py", line 634, in execute_script
return self.execute(command, {
File "C:\Users\PC.CC\Desktop\My Teams-Auto-Joiner\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\PC.CC\Desktop\My Teams-Auto-Joiner\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read property 'click' of null
(Session info: chrome=87.0.4280.88)

Whitelist instead of blacklist

Is your feature request related to a problem? Please describe.
I find that putting lots of teams in the config.json is a bit annoying. I'd rather put one or two team names in a whitelist, and have the script only search through those.

Describe the solution you'd like
I think having a whitelist for searching through teams would be better than using a blacklist.
If a user is only participating in one or a few teams, but has access to more than that, a whitelist would make it easier and faster to set the config.json to only look for meetings in the teams the user participates in.

Describe alternatives you've considered
It's possible to implement both a blacklist and a whitelist, and let the user choose which one to use, but it might be too clunky and unnecessarily complicated.

Additional context
Whitelisting vs blacklisting depends on each user case, but I think most users would prefer using a whitelist to choose which Teams the script should search in for meetings.

Script crash after join a meet

Describe the bug
Script crashes in after Join now page

Video
https://youtu.be/_O0fAz3XYAk

RUN python auto_joiner.py

[WDM] - Current google-chrome version is 85.0.4183
[WDM] - Get LATEST driver version for 85.0.4183
[WDM] - Driver [C:\Users\WONGH\.wdm\drivers\chromedriver\win32\85.0.4183.87\chromedriver.exe] found in cache
Timeout waiting for element: .use-app-lnk
Waiting for correct page...

Found Teams and Channels:
3D
        一般
20-21 中三級現場教室
        一般
        中文科
        中史科
        化學科
        生物科
        生活與社會科
        地理科
        佛化科
        物理科
        英文科
        音樂科
        商業科
        視藝科
        電腦科
        數學科
        閱讀科
        歷史科
        體育科

Start [s], Reload teams [r], Quit [q]
s

[12:03:25] Updating channels
Wating for 30s
Joined meeting: 20-21 中三級現場教室 > 音樂科
Traceback (most recent call last):
  File "auto_joiner.py", line 442, in <module>
    main()
  File "auto_joiner.py", line 417, in main
    if join_newest_meeting(teams):
  File "auto_joiner.py", line 254, in join_newest_meeting
    browser.find_element_by_css_selector("span[data-tid='appBarText-Teams']").click()
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 598, in find_element_by_css_selector
    return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"span[data-tid='appBarText-Teams']"}
  (Session info: chrome=85.0.4183.121)

Configuration file

{
  "email": "",
  "password": "",

  "run_at_time": "",

  "start_automatically": false,
  "organisation_num" : 1,
  "random_delay": true,
  "check_interval": 10,

  "auto_leave_after_min": -3,
  "leave_if_last": false,

  "headless" : false,
  "mute_audio": true,
  "chrome_type": "google-chrome",

  "blacklist": [
    {
      "team_name": "",
      "channel_names": [
        "",
        ""
      ]
    },


     {
      "team_name": "",
      "channel_names": [
      ]
    }


  ]
}

Desktop

  • OS: Windows10 64bit
  • Browser chrome
  • Version 85.0.4183.121

Hidden Groups Crash

Hi, the script works fine without hidden teams, if some teams are hidden the script will crash (so at the moment the fix consists in making those teams visible or deleting them).

Output:

[WDM] - Looking for [chromedriver 83.0.4103.39 linux64] driver in cache 
[WDM] - Driver found in cache [/home/user/.wdm/drivers/chromedriver/83.0.4103.39/linux64/chromedriver]
Waiting for correct page...
Traceback (most recent call last):
  File "auto_joiner.py", line 335, in <module>
    main()
  File "auto_joiner.py", line 295, in main
    team.init_channels()
  File "auto_joiner.py", line 73, in init_channels
    channel_elems = channels_elem.find_elements_by_css_selector("ul>ng-include>li")
AttributeError: 'NoneType' object has no attribute 'find_elements_by_css_selector'

Add config option: start site muted

I just want to join the online class for attendance with chrome muted

chrome_options.add_argument("--mute-audio")

add this to code and a config option for the same

Not joining meeting after leaving

Hi, when there are 2 or more meetings simultaneously, your program joins only one. Then after 5 tentatives leaves the meeting if there are less then 2(?) (I changed the value to 10 so I don't remember the exact value... oops) but cannot connect to the other one and enters in an infinite loop looking for new meetings.

Could you try solve this problem? Thanks a lot

Waiting for correct page... Nothing found, is Teams in list mode?

As soon as i enter the login id and password at the Microsoft login page. It takes me to the option of opening it with the app or on browser. At this stage when I click browser. This comes in the code Waiting for correct page...
Nothing found, is Teams in list mode?

start and stop checking at time, discord webhooks

Is your feature request related to a problem? Please describe.
i set the bot so it starts on startup and i run it in headless mode making it checking for meetings as long as my pc is up. the "problem" with that is it requires resources more than i need it to.

Describe the solution you'd like
if you can add a variable in the json file that specifies when the bot starts checking and when it stops (im assuming the current run_at_time variable changes when the bot starts working in general not just checking). for example i know for a fact that the earliest meeting in my case would start at 8:00 am if not later and the latest one would start at 6:00 pm and ends at most at 9:00 pm so if these variables get implemented i can set these times for the bot to start checking for meetings at/after 8:00 am and stop checking after 6:30 pm then just chilling until 8:00 am of the next day. saving a lot of resources while keeping everything automated without my intervention.

i have no alternative solutions but i do have another suggestion, i think it would be really cool to make the bot announce things like joining and leaving meetings via discord webhooks as i've seen similar bots do it.

Thank you!

I have trouble with the setup.

Dear TobiasPanker/users,

this is my first time getting in touch with a code. I think I have done everything right, installed all pip req's and have Phyton installed. But apparently he can't find the config.json file, even tho I have everything in one folder. This is my output:

============ RESTART: C:\Users\Leon\Desktop\Teams Bot\auto_joiner.py ===========
Traceback (most recent call last):
File "C:\Users\Leon\Desktop\Teams Bot\auto_joiner.py", line 620, in
load_config()
File "C:\Users\Leon\Desktop\Teams Bot\auto_joiner.py", line 131, in load_config
with open('config.json') as json_data_file:
FileNotFoundError: [Errno 2] No such file or directory: 'config.json'

I hope someone can help me because this is a very cool project and I would really like to use it 😃
Best greetings!

Message on Login

Hey could you add a config option to send a message to the chat of the meeting when it joins one or leaves one. I am required to register and register off by writing "here" and "bye" thanks ahead. Really cool project!

Getting Webdriver.Chrome Syuntax error

I am using this script on my pi -raspbian

I am getting this error

File "auto_joiner.py", line 18 browser: webdriver.Chrome = None ^ SyntaxError: invalid syntax

My current config

{
"email": "using my email",
"password": "usingmypassword",

"run_at_time": "",

"start_automatically": false,
"organisation_num" : 1,
"random_delay": false,
"check_interval": 5,

"auto_leave_after_min": -1,
"leave_if_last": true,

"headless" : false,
"mute_audio": false,
"chrome_type": "google-chromium",

"blacklist": [
{
"team_name": "Example Team 1",
"channel_names": [
"First Channel to blacklist in this team",
"Second Channel to blacklist"
]
},
{
"team_name": "Blacklist whole team",
"channel_names": [
]
}
]
}

I can't exit the meeting.

I have windows 10 and I am using google chrome. I am able to join the meeting but I am unable to exit it. This is the error I am getting...

[01:44:29] Updating channels
Joined meeting: Bot test > General
Traceback (most recent call last):
File ".\meeting_joiner.py", line 424, in
main()
File ".\meeting_joiner.py", line 417, in main
team.update_elem()
File ".\meeting_joiner.py", line 162, in update_elem
f"ul>li.team[role='treeitem']>div[data-tid='team-{self.name}-li']")
File "D:\Users\Abhrant\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 598, in find_element_by_css_selector
return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
File "D:\Users\Abhrant\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "D:\Users\Abhrant\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "D:\Users\Abhrant\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified
(Session info: chrome=84.0.4147.135)

Invalid Syntax Error.

File "auto_joiner.py", line 14
browser: webdriver.Chrome = None
^
SyntaxError: invalid syntax
Screenshot (26)
This error is coming i have installed chrome drivers and even added the location in path folder!
Screenshot (27)

Script crashes after joing a meet

Describe the bug
Once the script joins a meet, in the next iteration of updating channels, it crashes.
Note: the spawned chrome doesn't close as it would do when you manually close it.

Traceback (most recent call last):
  File "auto_joiner.py", line 427, in <module>
    main()
  File "auto_joiner.py", line 415, in main
    team.update_meetings()
  File "auto_joiner.py", line 99, in update_meetings
    channels = self.expand_channels()
  File "auto_joiner.py", line 63, in expand_channels
    elem = self.elem.find_element_by_css_selector("div.channels")
  File "/home/shake/delta/playground/Teams-Auto-Joiner/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 430, in find_element_by_css_selector
    return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
  File "/home/shake/delta/playground/Teams-Auto-Joiner/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 658, in find_element
    return self._execute(Command.FIND_CHILD_ELEMENT,
  File "/home/shake/delta/playground/Teams-Auto-Joiner/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "/home/shake/delta/playground/Teams-Auto-Joiner/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/home/shake/delta/playground/Teams-Auto-Joiner/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=83.0.4103.116)

Expected behavior
Shouldnt Crash

Configuration file

{
  "email": "",
  "password": "",

  "start_automatically": false,
  "organisation_num": 1,
  "random_delay": false,
  "check_interval": 60,

  "auto_leave_after_min": -1,
  "leave_if_last": true,

  "headless": false,
  "mute_audio": false,
  "chrome_type": "google-chrome",

  "blacklist": [
    {
      "team_name": "Example Team 1",
      "channel_names": [
        "First Channel to blacklist in this team",
        "Second Channel to blacklist"
      ]
    },
    {
      "team_name": "Blacklist whole team",
      "channel_names": []
    }
  ]
}

Desktop (please complete the following information):

  • OS: Manjaro 20.1
  • Browser: Chrome
  • Version: 83.0.4103

Browser crashes

Describe the bug
[1203/091520.323:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3)

To Reproduce
Steps to reproduce the behavior:

  1. Everything working fine
  2. It joined the meeting Automatically
  3. After 15 to 20 mins it crashed and chrome browser closed

Desktop (please complete the following information):

  • OS: Windows 10
  • Browser Chrome
  • Version 87.0.4280.88

Joining even if the meeting is blacklisted

I had a class I didn't want to join, because its optional (support class), so I left "blacklist_meeting_re" set in config.json with a regex syntax that looks like right.

But auto_joiner.py tried to join in that class even confirming it was [BLACKLISTED]

Screenshot
joiner
The print didn't catch the end of that line, but its written

Plantão de Física 2 EMC from 9:30 AM to 10:20 AM 1604665800 [Calendar] [BLACKLISTED]

And after Wating for 23s

Configuration file

{
 "email": "*****",
 "password": "********",

 "run_at_time": "",

 "meeting_mode": 1,
 "organisation_num" : 1,
 "random_delay": true,
 "check_interval": 10,

 "auto_leave_after_min": 60,
 "leave_if_last": true,

 "headless" : false,
 "mute_audio": true,
 "chrome_type": "google-chrome",

 "blacklist": [
   {
     "team_name": "Example Team 1",
     "channel_names": [
       "First Channel to blacklist in this team",
       "Second Channel to blacklist"
     ]
   },
    {
     "team_name": "Blacklist whole team",
     "channel_names": [
     ]
   }
 ],
 "blacklist_meeting_re": "(?i)^(plantão|apoio)"
}

(?i)^(plantão|apoio) catch both expressions (Brazillian Portuguese) with or without capital letters.
I put it after some research and testing, should be right even why the [BLACKLISTED] flag appears.

Desktop

  • OS: Zorin OS 15.3 (Ubuntu 18.04.1 LTS)
  • Browser: google-chrome
  • Version: 86.0.4240.183 (Official Build) (64-bit)

Additional context
I made some changes to specific needs:

  • in check_blacklist() to let only one team not to be blacklisted
  • in windows resizer to a bigger size
  • in auto_leave_after_min feature to take into account double classes
  • in try: main(), adding an except to end the program without errors if the browser is closed

This is probably not the reason for the bug

Why does it happen? Did i do something wrong? Could it be the fact that the meeting is appearing as "Meeting now" instead of "Plantão de Física 2 EMC"?

Thanks in advance

Joining the meeting depending upon the meeting name using Regex

So I want to join the meetings only of my batch, which depends on the name of the meeting itself, if there is a way to fetch the name and decide. Like in the picture below I have to join the meeting with batch A2.

Screenshot from 2020-09-04 14-20-40

For normal lectures intended for everyone it works really good. Thank you for that!

Staying in the disclosed meetings

Hey, bot currently stays in the meeting even though no one left in the current meeting, can you add an option:

if organizer leaves:
leave meeting
blacklist meeting

or

if you are the only user:
leave meeting
blacklist meeting

in order not to keep joining the same open meetings, blacklist that specific meeting with the url or an ID (if possible)

Keeps crashing again and again.

The python Script keeps crashing with the following Errors:

`
Traceback (most recent call last):
File "auto_joiner.py", line 54, in expand_channels
self.get_elem().find_element_by_css_selector("div.channels")
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 430, in find_element_by_css_selector
return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 659, in find_element
{"using": by, "value": value})['value']
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div.channels"}
(Session info: chrome=86.0.4240.183)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "auto_joiner.py", line 636, in
main()
File "auto_joiner.py", line 582, in main
teams = get_all_teams()
File "auto_joiner.py", line 283, in get_all_teams
return [Team(team_names[i], team_ids[i]) for i in range(len(team_elems))]
File "auto_joiner.py", line 283, in
return [Team(team_names[i], team_ids[i]) for i in range(len(team_elems))]
File "auto_joiner.py", line 36, in init
self.get_channels()
File "auto_joiner.py", line 63, in get_channels
self.expand_channels()
File "auto_joiner.py", line 57, in expand_channels
self.get_elem().click()
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\sampurn\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element

...
is not clickable at point (208, 706). Other element would receive the click:
...

(Session info: chrome=86.0.4240.183)`

can not join the meeting

i used python 3.8.5 ( downloaded from python.org) and python 3.8 ( downloaded from Microsoft Store)
when it detected a meeting had started by organizer , it output some errors ,
here is the python 3.8 output :
Traceback (most recent call last): File "C:\Users\hmcha\Desktop\Teams-Auto-Joiner-master\auto_joiner.py", line 442, in <module> main() File "C:\Users\hmcha\Desktop\Teams-Auto-Joiner-master\auto_joiner.py", line 417, in main if join_newest_meeting(teams): File "C:\Users\hmcha\Desktop\Teams-Auto-Joiner-master\auto_joiner.py", line 227, in join_newest_meeting join_btn.click() File "C:\Users\hmcha\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click self._execute(Command.CLICK_ELEMENT) File "C:\Users\hmcha\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute return self._parent.execute(command, params) File "C:\Users\hmcha\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\hmcha\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <button type="button" class="ts-sym ts-btn ts-btn-primary inset-border icons-call-jump-in ts-calling-join-button app-title-bar-button app-icons-fill-hover call-jump-in" ng-class="(ctrl.roundButton ? (ctrl.audioOnly ? 'icons-call-audio' : 'icons-call-video-filled') + ' inset-border inset-border-round ts-calling-join-button app-title-bar-button app-icons-fill-hover' : ctrl.joinButtonWithIcon ? 'icons-call-jump-in ts-calling-join-button app-title-bar-button app-icons-fill-hover call-jump-in' : ctrl.isBannerButton ? 'call-jump-in no-icons-call-jump-in ts-calling-banner-button' : 'call-jump-in no-icons-call-jump-in')" ng-click="ctrl.joinCall()" track-outcome="5" track-scenario="795" track-scenario-type="22" track-name="317" track-type="42" track-summary="Join an ongoing meetup from the channel ongoing meeting object" track-data="{callId: '0dfa7834-31b0-4f63-a3bc-b05ca9989d55', correlationId: '1ecdbfce-141c-4c63-98ac-347eed83377c'}" ng-disabled="ctrl.reallyDisabled" title="Join call with audio" data-tid="join-btn-0dfa7834-31b0-4f63-a3bc-b05ca9989d55">...</button> is not clickable at point (217, 478). Other element would receive the click: <span ng-if="!clc.filterString" class="truncate header-text" title="..." dir="auto">ITP3901-OSF-2021-S1-1A-khtong</span> (Session info: chrome=85.0.4183.102)

and here is the python 3.8.5 output
Traceback (most recent call last): File "auto_joiner.py", line 442, in <module> main() File "auto_joiner.py", line 417, in main if join_newest_meeting(teams): File "auto_joiner.py", line 227, in join_newest_meeting join_btn.click() File "C:\Users\hmcha\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click self._execute(Command.CLICK_ELEMENT) File "C:\Users\hmcha\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute return self._parent.execute(command, params) File "C:\Users\hmcha\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\hmcha\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <button type="button" class="ts-sym ts-btn ts-btn-primary inset-border icons-call-jump-in ts-calling-join-button app-title-bar-button app-icons-fill-hover call-jump-in" ng-class="(ctrl.roundButton ? (ctrl.audioOnly ? 'icons-call-audio' : 'icons-call-video-filled') + ' inset-border inset-border-round ts-calling-join-button app-title-bar-button app-icons-fill-hover' : ctrl.joinButtonWithIcon ? 'icons-call-jump-in ts-calling-join-button app-title-bar-button app-icons-fill-hover call-jump-in' : ctrl.isBannerButton ? 'call-jump-in no-icons-call-jump-in ts-calling-banner-button' : 'call-jump-in no-icons-call-jump-in')" ng-click="ctrl.joinCall()" track-outcome="5" track-scenario="795" track-scenario-type="22" track-name="317" track-type="42" track-summary="Join an ongoing meetup from the channel ongoing meeting object" track-data="{callId: '0dfa7834-31b0-4f63-a3bc-b05ca9989d55', correlationId: '5d0588c4-a5ae-43f4-8ef5-7dd149fc9065'}" ng-disabled="ctrl.reallyDisabled" title="Join call with audio" data-tid="join-btn-0dfa7834-31b0-4f63-a3bc-b05ca9989d55">...</button> is not clickable at point (217, 478). Other element would receive the click: <span ng-if="!clc.filterString" class="truncate header-text" title="..." dir="auto">ITP3901-OSF-2021-S1-1A-khtong</span> (Session info: chrome=85.0.4183.102)

html tags used in script changed, needs to be updated....

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Configuration file
Paste your configuration file here, without password and email.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Blacklist tries to match team names perfectly

Is your feature request related to a problem? Please describe.
The blacklist feature of the script only looks for perfect matches between team names set in config.json and team names searched for in the Teams web app:

blacklist_item = next((bl_team for bl_team in blacklist if bl_team['team_name'] == self.name), None)

This may cause some issues if one or more characters are missing from the team_name value set by a user.

Describe the solution you'd like
I think a more user-friendly way of searching for blacklisted team names would be to see if the team_name string in config.json is contained within the actual team names searched through.

Additional context
See also: #37, where I propose the use of a whitelist instead of a blacklist to search through the appropriate teams. Note: I think the whitelist should search for relevant team names in the same way as described here (checking if team_name is contained rather than checking for an exact match ==).

program stucks

not working after resize the window height
the browser stuck in Assignment page , whatever the mode is 1 or 3 , just stay at the Assignment page then error the close itself
after like 5 mins , it showed waiting for correct page ... timeout , and closed chrome and itself
`
C:\Users\xxx\Desktop\Teams-Auto-Joiner-master>python auto_joiner.py

[WDM] - Current google-chrome version is 85.0.4183
[WDM] - Get LATEST driver version for 85.0.4183
[WDM] - Driver [C:\Users\hmcha.wdm\drivers\chromedriver\win32\85.0.4183.87\chromedriver.exe] found in cache

DevTools listening on ws://127.0.0.1:10491/devtools/browser/f7edd452-58da-4ec8-afdc-66030d5b0425
Resized window
Waiting for correct page...Timeout waiting for element: div[data-tid='team-channel-list']

C:\Users\xxxDesktop\Teams-Auto-Joiner-master>pause
Press any key to continue . . .
`

Leave with Organizer/Presenter/Attendee

always my classmates afk in the meeting , so please add this
[ leaves the meeting with roles 1, 2, 3 and 4 ]
1 Organizer and Presenter
2only Organizer
3only Presenter
4only Attendee

I wish I could actually watch the meeting

I just cant watch my meetings because the window is very small. I tried to change the window width and height, but the program just stopped working, and when I try to manually expand it, the meeting get window-sized again after the time set in the config.json

I wish I could watch the full meeting in full screen without having to maximize it every time

Compatability with cron?

Is your feature request related to a problem? Please describe.
I've tried running the script using cron, but it doesn't seem to work with it even if the full details of the python location + script are provided.

Describe the solution you'd like
To be able to schedule a cron job to automatically execute the script

Describe alternatives you've considered
Maybe a feature within the program itself to start looking for meetings to join at certain user-specified times.

Additional context
I want to schedule the time periods when the script is active and seeking meetings to join.

Customizable random_delay range

Is your feature request related to a problem? Please describe.
I find that 30 seconds on the upper limit of the random delay before joining is too long for me.

Describe the solution you'd like
I'd like having the ability to choose lower and upper limits of the random joining delay range.
For example, there could be a delay_range variable in the default config.json.example, like this:

"random_delay": false,
"delay_range": [10, 30]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.