💉🤖 Bot for the German "ImpfterminService - 116117"

Overview

💉 🤖 Impf-Bot

Kotlin Java Gradle Selenium

Searches the official "ImpfterminService - Der Patientenservice 116117" for free Corona vaccination slots. It can search multiple locations at once which can be provided in a list. When it finds a free slot, it can use Slack to send you a message. All timings can be configured for your needs and to avoid blocking.

📱 Also the SMS verification step is managed by a Slack bot. Simply write the verification code into the Slack channel:

sms:999-999

Features

  Full browser automation
  No API Hacks
  Telegram integration
  Slack integration
  Waiting room detection
  Customizable by property file
  Docker support to run it locally or in the cloud

🤩 Thank You

This bot exits and became so useful because of the over 20 people who contributed to this project. That is strength of open-source power 💪
zaanposni fabicodes atpanos philib s01iD superflo22 seppi91 alfonsrv schniggie h0nIg Timwun TobseF
So any thanks has to go to all contributors.
If anybody still wants to honor the initial publish you can buy Tobse a choco donut 🍩 .

🧭 Overview

Sequence Digramm These steps are repeated for every location. So it's no problem to check 14 locations at once. If the bot recognizes that no free slots are available, it waits 30 seconds and goes on to the next location.

Warning: The online booking isn't an authorization

On the booking date you still have to bring the documents with you, to proof that you are qualified to receive the vaccination. Check out the official guidelines and make sure you are qualified for them. This bot doesn't help you get a privilege. It only allows you to get a date without losing the nerves or waisting a lifetime in pointless callcenter calls.

What is Slack and do I need it?

This bot can also work without it. Slack is a messaging application for companies. It is useful to get realtime updates from the bot and to do the SMS verification without the need to be in front of your computer. Otherwise, when the verification starts, you have only 10 minutes left to type the code into the automated browser window. If you take a journey through the dangerous outside world, this may be unpractical. I have chosen Slack, because it proves a nice Java API and it was already running in our company.

🛠 Setup

Java

To build and run the bot you need at least a Java 14 installation.

Selenium

The Impf-Bot uses Selenium to automate a webbrowser. Selenium requires a locally installed driver and browser - Chrome is recommended. The download of the chromedriver is done automatically via WebDriverManager.

config.properties

Settings are stored in a config file which is located in: src/main/resources/config.properties.
Edit these settings before the first run. A missing boolean property will be treated as false.

mainPageUrl = https://www.impfterminservice.de/impftermine
# Name of the state from the select list
state = Baden-Württemberg
# Comma separated list of locations. Optional, if you already have a placement code just add it in square brackets after the place. Since placement codes are not related to locations but to servers you can furthermore optionally specify the related server code next to the placement code in parentheses. The server code can be found in the URL e.g. "001-iz.impfterminservice.de" -> server code == "001".
locations = 69124 Heidelberg[XXXX-XXXX-XXXX](XXX),76137 Karlsruhe

# Birth date, used for age verification (which also changes the available vaccines).
birthDate = 31.12.1994

# Waiting time before checking the next location in seconds [s]
waitingTime = 120
# Waiting time for a manual user interaction in minutes [m]
waitingTimeForUserAction = 15
# Waiting time in Waiting Room in minutes [m]
waitingTimeInWaitingRoom = 15
# Timeout when searching an element on the page in seconds [s]
searchElementTimeout = 16
# Explicit waiting time for browser updates in seconds [s]
waitingTimeForBrowser = 2

# Settings for the request page. Only needed if you set `sendRequest = true`
sendRequest = false
email = [email protected]
# Mobile number for sms verification. Numbers after the "+49"
mobileNumber = 152123123123

# Enabled the Slack messages
slackEnabled = false
# These can be skipped, if Slack is disabled
slackBotApiToken = xoxb-123123123-123123123123123123123123123
slackBotChannel = #random
# Also read the SMS back from a channel. Needs the slackBotChannelReadSms-Name and Id.
readSmsFromSlack = false
slackBotChannelReadSmsName = #smsgameway
slackBotChannelReadSmsId = CE99999PY

# Enabled the Telegram messages
telegramEnabled = false
# These can be skipped, if Telegram is disabled
telegramApiToken = 10000001:AAEMkawDRi5-_yX7fr-pxxxxxxxxx-2EOE
telegramBotUsername = @iufdhsgouihsdfgbot
telegramChatId = 1231231231

# Enabled the Twilio Sendgrid email messages
sendgridEnabled = false
# These can be skipped, if Sendgrid is disabled
sendgridApiToken = SG.aaaaaaaaaaaaaaaaaaaaaa.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
sendgridEmailFrom = [email protected]
sendgridEmailTo = [email protected]

# Enabled the Gmail email messages
gmailEnabled = false
# These can be skipped, if Gmail is disabled
gmailAppPassword = xxxxxxxxxxxxxxxx
gmailEmailFrom = [email protected]
# Can be the same as the from email
gmailEmailTo = [email protected]

# Enabled the IFTTT notifications
iftttEnabled = false
# These can be skipped, if IFTTT is disabled
iftttApiKey = xxxxxxxxxxxxxxxx
iftttEventName = notify

# Enabled alarm sound.
# Alarm will be played on start and in addition to an enabled notification service.
alarmEnabled = false
# Alarm duration in msec
alarmDuration = 2000
# Tone frequency in hz
alarmFrequency = 800
# Volume in percentage (0.0-1.0)
alarmVolumeInPercentage = 0.5

# Automatically selects the first possible vaccination date and enters all required personal data based on the following values to book this vaccination slot for you.
bookingEnabled = false
# Takes screenshots during booking process to have proof of you booking. (Optional)
takeScreenshots = false
# Defines the path were all screenshots will be stored in (Optional). Files will be prefixed with "impf-bot-"
outputPath = /home
# Personal Data
# Salutation (m=man, w=women, d=divers, c=child)
personalDataSalutation = m
# Firstname
personalDataFirstname = Max
# Lastname
personalDataLastname = Mustermann
# Zipcode
personalDataZipcode = 69124
# City
personalDataCity = Heidelberg
# Street
personalDataStreet = Hauptstraße
# House number
personalDataHouseNumber = 911
# Phone number. Numbers after the "+49"
personalDataMobileNumber = 152123123123
# E-Mail
personalDataEmail = [email protected]

# It seems that non windows agents are blocked. You can set it to "default" to use the default one of chrome.
# Could be something like: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
userAgent = default

# Clears browser cookies to avoid bot detection. Disabled by default.
clearCookies = false
# Experimental feature, which tries to clear the browser cache to avoid bot detection. Disabled by default.
experimentalClearBrowser = false

Setup Slack

This step is optional. You can find detailed setup instructions here: SlackBot Setup.

Setup Telegram

This step is optional. You can find detailed setup instructions here: TelegramBot Setup.

Setup Gmail

This step is optional. You can find detailed setup instructions here: Gmail Setup.

Setup Ifttt

This step is optional. You can find detailed setup instructions here: Ifttt Setup.

Docker

This step is optional. To run this tool in Docker, follow this tutorial: Docker.

simplelogger.properties

Per default the bot logs only successful bookings.
To change the Log-Level edit the defaultLogLevel:
org.slf4j.simpleLogger.defaultLogLevel = info
| Change the log level to debug to get a more detailed output during every step.

🔨 Build

gradle build

The build creates runnable Java-fat-jar which contains all dependencies and the config:
build/libs/impf-bot-1.0-SNAPSHOT-all.jar

🚀 Start

To run the bot, simply use the gradle command:

gradle run

As an alternative, you can also start it with the fat-jar in the command line by:

java -jar build/libs/impf-bot-1.0-SNAPSHOT-all.jar 
Comments
  • Docker on raspberry pi: chromedriver syntax error

    Docker on raspberry pi: chromedriver syntax error

    Hi, while trying to run docker on a raspberry pi 4 I encountered some issues with chromedriver. Does anyone of you have a running setup with a rpi4 (or 3)? The error occurs when running the docker container, it was built without any problems. I am not a docker expert, is there any way to narrow down the error?

    /app/chromedriver: 1: /ap/chromedriver: Syntax error: "(" unexpected

    chromedriver syntax error

    opened by Bergdoc 21
  • feat: booking process is now fully automated

    feat: booking process is now fully automated

    Hi @TobseF ,

    this new PR extends the current state of this bot to be now also used for final vaccination date bookings.

    It works as follows:

    Whenever a free slot is available:

    1. Selects the first slot possible

    2. Enters all personal data (when provided within config.properties)

    3. Submits the booking finally

    4. Takes screenshots of all steps (will be stored statically: $HOME/Desktop/)

    These are the required additions within config.properties:

    ...
    # Automatically selects the first possible vaccination date and enters all required personal data based on the following values to book this vaccination slot for you.
    bookingEnabled = false
    # Takes screenshots during booking process to have proof of you booking. (Optional)
    takeScreenshots = false
    # Defines the path were all screenshots will be stored in (Optional). Files will be prefixed with "impf-bot-"
    outputPath = /home
    # Personal Data
    # Salutation (m=man, w=women, d=divers, c=child)
    personalDataSalutation = m
    # Firstname
    personalDataFirstname = Max
    # Lastname
    personalDataLastname = Mustermann
    # Zipcode
    personalDataZipcode = 69124
    # City
    personalDataCity = Heidelberg
    # Street
    personalDataStreet = Hauptstraße
    # House number
    personalDataHouseNumber = 911
    # Phone number. Numbers after the "+49"
    personalDataMobileNumber = 152123123123
    # E-Mail
    personalDataEmail = [email protected]
    

    Please let me know if these changes match your expectations. ~~I am still prettifying some minor things and removing some //TODOs though..~~

    Cheers Timo

    opened by timoknapp 16
  • Bot incorrectly enters Vermittlungscodes

    Bot incorrectly enters Vermittlungscodes

    Thanks for developing this bot!

    However, it seems that it unfortunately mistypes the Vermittlungscode on the booking page (i.e. only fills in the first two blanks, but misses the first letter) and then throws an error:

    impf-bot    | 16.05 16:35:20 ERROR ReportJob - Failed to check location: 72072 T?bingen
    impf-bot    | element click intercepted: Element <button _ngcontent-nfa-c113="" type="submit" class="btn kv-btn btn-magenta text-uppercase d-inline-block" disabled="">...</button> is not clickable at point (467, 499). Other element would receive the click: <div _ngcontent-nfa-c113="" class="form-group text-center">...</div>
    impf-bot    |   (Session info: chrome=90.0.4430.93)
    impf-bot    | Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    impf-bot    | System info: host: '6adf4305179a', ip: '172.28.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-141-generic', java.version: '11.0.11'
    impf-bot    | Driver info: org.openqa.selenium.chrome.ChromeDriver
    impf-bot    | Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 90.0.4430.93, chrome: {chromedriverVersion: 90.0.4430.24 (4c6d850f087da..., userDataDir: /tmp/.com.google.Chrome.TyvRGF}, goog:chromeOptions: {debuggerAddress: localhost:40049}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
    impf-bot    | Session ID: 9f166dc743c26769d1d90159048048e9
    impf-bot    | org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <button _ngcontent-nfa-c113="" type="submit" class="btn kv-btn btn-magenta text-uppercase d-inline-block" disabled="">...</button> is not clickable at point (467, 499). Other element would receive the click: <div _ngcontent-nfa-c113="" class="form-group text-center">...</div>
    impf-bot    |   (Session info: chrome=90.0.4430.93)
    impf-bot    | Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    impf-bot    | System info: host: '6adf4305179a', ip: '172.28.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-141-generic', java.version: '11.0.11'
    impf-bot    | Driver info: org.openqa.selenium.chrome.ChromeDriver
    impf-bot    | Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 90.0.4430.93, chrome: {chromedriverVersion: 90.0.4430.24 (4c6d850f087da..., userDataDir: /tmp/.com.google.Chrome.TyvRGF}, goog:chromeOptions: {debuggerAddress: localhost:40049}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
    impf-bot    | Session ID: 9f166dc743c26769d1d90159048048e9
    impf-bot    |   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    impf-bot    |   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    impf-bot    |   at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    impf-bot    |   at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    impf-bot    |   at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    impf-bot    |   at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    impf-bot    |   at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    impf-bot    |   at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    impf-bot    |   at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    impf-bot    |   at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    impf-bot    |   at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285)
    impf-bot    |   at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)
    impf-bot    |   at de.tfr.impf.page.LocationPage.submitInput(LocationPage.kt:33)
    impf-bot    |   at de.tfr.impf.page.LocationPage.searchForFreeDate(LocationPage.kt:66)
    impf-bot    |   at de.tfr.impf.ReportJob.searchFreeDateByCode(ReportJob.kt:100)
    impf-bot    |   at de.tfr.impf.ReportJob.checkLocation(ReportJob.kt:68)
    impf-bot    |   at de.tfr.impf.ReportJob.checkLocations(ReportJob.kt:44)
    impf-bot    |   at de.tfr.impf.ReportJob.reportFreeSlots(ReportJob.kt:37)
    impf-bot    |   at de.tfr.impf.StartKt.main(Start.kt:4)
    impf-bot    |   at de.tfr.impf.StartKt.main(Start.kt)
    ```
    opened by fabianhick 16
  • "Es ist ein unerwarteter Fehler aufgetreten" [Bot Protection?]

    Seit heute ist glaube ich die Bot Protection nochmal massiv hochgefahren worden. Aktuell hält mein Bot ca. 20min durch bevor ich nach der Eingabe der Codes die im Titel genannte Nachricht erhalte und die Abfrage im Hintergrund einen 429 erhält (Too many requests). Frische, neue IP-Adressen verlängern dies mittlerweile auch nicht mehr. Würde es Sinn falls die Meldung kommt dem ganze automatisch 30min oder ähnliches zu geben und denen keine Anfragen gestellt werden oder besteht bei euch dieses Problem gar nicht?

    opened by mrcldrhr 10
  • Error message on webpage triggers

    Error message on webpage triggers "found free vaccinations dates"

    The situation is the following: Impfbot searches for free appointments at a specific location with a Vermittlungscode.

    The webpage throws an error "Es ist ein unerwarteter Fehler aufgetreten":

    scrrn

    Impfbot, however, triggers a "found free vaccinations dates" event:

    Screenshot 2021-04-21 at 10 57 29
    opened by rtwld 10
  • Question: Terminsuche

    Question: Terminsuche

    Hey, danke für das Veröffentlichen dieses Bots!

    Ich habe leider kein passenderen Ort für meine Frage gefunden deshalb steht sie nun hier.

    Wenn ich nach neuen Impfterminen (mit Vermittlungscode) suche dann setzt sich der Timer für die Reservierung nicht zurück. Daher stelle ich mir die Frage ob überhaupt die Möglichkeit besteht, dass nach einer Aktualisierung (innerhalb der 10 Minuten) neue Termine auftauchen.

    Falls dazu nichts bekannt ist reichen mir auch eure Erfahrungsberichte.

    Danke für die Antwort!

    discussion 
    opened by Contexys 8
  • Falsche Erkennung von Terminen?

    Falsche Erkennung von Terminen?

    Hallo zusammen,

    heute morgen hatte ich es zweimal, dass der Bot bei hinterlegten Vermittlungscodes inkl. ServerId (Also Format[XXXX-XXXX-XXXX](00X)) der Meinung war, er hätte einen buchbaren Termin gefunden; der ferngesteuerte Browser zeigte aber lediglich den "Termine suchen"-Button an (also kein geöffnetes Overlay mit tatsächlichen Terminen drin). Bonus-Info: das Impfzentrum war zu dem Zeitpunkt schon wieder auf Warteraum gestellt - uU geht da im Hintergrund ein XHR-Request in die Büsche (bekommt Warteraum HTML statt JSON) und das JS reagiert nicht/falsch/unerwartet darauf und Selenium "findet" die Termin-Struktur.

    Leider schlecht dokumentierbar/nachstellbar. Kann sich jemand von euch einen Reim darauf machen?

    opened by prok42 7
  • bind() failed und Timeouts

    bind() failed und Timeouts

    Sowohl mit dem Image von docker, als auch mit dem local build bekomme ich Timeouts. Jemand einen Tipp, was schief läuft?

    Starting ChromeDriver 90.0.4430.24 (4c6d850f087da467d926e8eddb76550aed655991-refs/branch-heads/4430@{#429}) on port 31822
    Only local connections are allowed.
    Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
    [1620372363.140][SEVERE]: bind() failed: Cannot assign requested address (99)
    ChromeDriver was started successfully.
    
    [1620372664.322][SEVERE]: Timed out receiving message from renderer: 300.000
    [1620372664.322][SEVERE]: Timed out receiving message from renderer: -0.001
    [1620372664.326][SEVERE]: Timed out receiving message from renderer: -0.001
    07.05 07:31:04 ERROR ReportJob - Failed to check location: 69124 Heidelberg
    timeout: Timed out receiving message from renderer: -0.001
      (Session info: headless chrome=90.0.4430.93)
    Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    System info: host: 'bd4382711c49', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.25-linuxkit', java.version: '11.0.11'
    Driver info: org.openqa.selenium.chrome.ChromeDriver
    Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 90.0.4430.93, chrome: {chromedriverVersion: 90.0.4430.24 (4c6d850f087da..., userDataDir: /tmp/.com.google.Chrome.IFnWoK}, goog:chromeOptions: {debuggerAddress: localhost:38567}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
    Session ID: ff68dce71cc1ee272b1bb66193a8c6bf
    org.openqa.selenium.TimeoutException: timeout: Timed out receiving message from renderer: -0.001
      (Session info: headless chrome=90.0.4430.93)
    Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    System info: host: 'bd4382711c49', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.25-linuxkit', java.version: '11.0.11'
    Driver info: org.openqa.selenium.chrome.ChromeDriver
    Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 90.0.4430.93, chrome: {chromedriverVersion: 90.0.4430.24 (4c6d850f087da..., userDataDir: /tmp/.com.google.Chrome.IFnWoK}, goog:chromeOptions: {debuggerAddress: localhost:38567}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
    Session ID: ff68dce71cc1ee272b1bb66193a8c6bf
    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    	at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    	at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    	at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    	at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    	at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    	at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:277)
    	at de.tfr.impf.page.MainPage.open(MainPage.kt:10)
    	at de.tfr.impf.ReportJob.openMainPage(ReportJob.kt:188)
    	at de.tfr.impf.ReportJob.checkLocation(ReportJob.kt:47)
    	at de.tfr.impf.ReportJob.checkLocations(ReportJob.kt:37)
    	at de.tfr.impf.ReportJob.reportFreeSlots(ReportJob.kt:30)
    	at de.tfr.impf.StartKt.main(Start.kt:4)
    	at de.tfr.impf.StartKt.main(Start.kt)
    
    opened by LPTT 6
  • Birthdate required for Vermittlungscode

    Birthdate required for Vermittlungscode

    Hi All Together,

    @TobseF thanks for the awesome bot. It looks like there is a little problem with the Vermittlungscode search. It now queries the date of birth field instead of Persons age. Is there any way to change this?

    opened by alimazhar1991 5
  • fix false positives for available slots

    fix false positives for available slots

    sometimes the check for available dates will fail, because requests are rather slow (30-60s) after the waiting queue disappears. This will fix false positives

    <div _ngcontent-nfa-c125="" class="d-none d-lg-flex its-slot-pair-search-title"><div _ngcontent-nfa-c125="" class="d-flex its-slot-pair-search-slot-wrapper"><span _ngcontent-nfa-c125="" class="flex-fill"><strong _ngcontent-nfa-c125="">1. Impftermin</strong></span><span _ngcontent-nfa-c125="" class="its-slot-pair-search-slot-sep"></span><span _ngcontent-nfa-c125="" class="flex-fill"><strong _ngcontent-nfa-c125="">2. Impftermin</strong></span></div><div _ngcontent-nfa-c125="" class="its-slot-pair-search-radio-wrapper"></div></div>
    
    opened by h0nIg 5
  • Problem with Umlauts in Locations

    Problem with Umlauts in Locations

    Using the docker version:

    impf-bot    | Session ID: 0aadc7e2740679977b3e80c3834d2151
    impf-bot    |   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    impf-bot    |   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    impf-bot    |   at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    impf-bot    |   at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    impf-bot    |   at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    impf-bot    |   at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    impf-bot    |   at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    impf-bot    |   at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    impf-bot    |   at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    impf-bot    |   at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    impf-bot    |   at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285)
    impf-bot    |   at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)
    impf-bot    |   at de.tfr.impf.page.LocationPage.submitInput(LocationPage.kt:30)
    impf-bot    |   at de.tfr.impf.page.LocationPage.searchForFreeDate(LocationPage.kt:63)
    impf-bot    |   at de.tfr.impf.ReportJob.searchFreeDateByCode(ReportJob.kt:83)
    impf-bot    |   at de.tfr.impf.ReportJob.checkLocation(ReportJob.kt:59)
    impf-bot    |   at de.tfr.impf.ReportJob.checkLocations(ReportJob.kt:35)
    impf-bot    |   at de.tfr.impf.ReportJob.reportFreeSlots(ReportJob.kt:28)
    impf-bot    |   at de.tfr.impf.StartKt.main(Start.kt:4)
    impf-bot    |   at de.tfr.impf.StartKt.main(Start.kt)
    impf-bot    | 10.05 10:15:48 ERROR ReportJob - Failed to check location: 74613 ?hringen
    impf-bot    | element not interactable: element has zero size
    impf-bot    |   (Session info: chrome=90.0.4430.93)
    
    ~/impf-bot$ cat config.properties | grep loca
    # Comma separated list of locations.
    locations = 71636 Ludwigsburg,74081 Heilbronn,74360 Ilsfeld-Auenstein,74549 Wolpertshausen,70174 Stuttgart,70376 Stuttgart,70629 Leinfelden-Echterdingen,71334 Waiblingen,74585 Rot am See,74613 Öhringen,74821 Mosbach,74889 Sinsheim,75056 Sulzfeld
    
    opened by schniggie 5
  • Bot does not correctly identify the second

    Bot does not correctly identify the second "Keine freien Termine" screen

    It seems that the bot does not correctly identify the second option where one can receive "Es wurden keine freien Termine in Ihrer Region gefunden. Bitte probieren Sie es später erneut." case.

    The screenshot below is accompanied by

    INFO ReportJob - Found free seats in location 74081 Heilbronn:https://002-iz.impfterminservice.de/impftermine/service?plz=74081
    Five minutes left to send the sms verification
    

    in the log.

    Screenshot 2021-06-20 at 20 01 05

    It seems to me that for some reason https://github.com/TobseF/impf-bot/blob/master/src/main/kotlin/de/tfr/impf/ReportJob.kt#L239 does not trigger anymore and it just continues on and waits for the user interaction (which allows reclicking "Schnellprüfung durchführen" but I have yet to see this change the response.

    My kotlin and selenium foo is not strong enough to track down why only one of the two isFull works correctly...

    opened by healther 0
  • Automatische Buchung scheint gebrochen:

    Automatische Buchung scheint gebrochen: "element click intercepted: Element ... is not clickable at point (331, 821)"

    Heute habe ich mal wieder den sehr guten Bot für einen Bekannten angeworfen, vorher noch Update von e34d36e3ebd773c59360b86287be1b55b3ad4b41 auf 7234e13c496fdcc232cad53f467b59652073fc83, neu gebaut und gestartet. Im laufe des Nachmittags hatte ich gleich die Möglichkeit einen Termin zu buchen, allerdings gab es folgende Ausgabe auf der Konsole:

    17.06 14:21:58 INFO ReportJob - Found free vaccination dates in location 75175 Pforzheim:https://005-iz.impfterminservice.de/impftermine/suche/YOU-DONT-CARE/75175
    Ten minutes left to choose a date.
    17.06 14:22:00 INFO ReportJob - Selected first vaccination date
    17.06 14:22:03 INFO ReportJob - Second booking step is shown
    17.06 14:22:06 INFO ReportJob - Showing personal data form
    17.06 14:22:08 INFO ReportJob - Salutation entered...
    17.06 14:22:11 INFO ReportJob - Firstname entered...
    17.06 14:22:13 INFO ReportJob - Lastname entered...
    17.06 14:22:15 INFO ReportJob - Zipcode entered...
    17.06 14:22:18 INFO ReportJob - City entered...
    17.06 14:22:20 INFO ReportJob - Street entered...
    17.06 14:22:22 INFO ReportJob - Housenumber entered...
    17.06 14:22:24 INFO ReportJob - Phone entered...
    17.06 14:22:27 INFO ReportJob - Email entered...
    17.06 14:22:30 ERROR ReportJob - Failed to check location: 75175 Pforzheim
    element click intercepted: Element <button type="submit" class="btn kv-btn btn-magenta text-center d-inline-block" disabled="">...</button> is not clickable at point (331, 821). Other element would receive the click: <div class="form-group">...</div>
      (Session info: chrome=91.0.4472.106)
    Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    System info: host: 'L1960', ip: '192.168.0.11', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '15.0.1'
    Driver info: org.openqa.selenium.chrome.ChromeDriver
    Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 91.0.4472.106, chrome: {chromedriverVersion: 91.0.4472.101 (af52a90bf870..., userDataDir: C:\Users\ANONY~1\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:15254}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
    Session ID: 0791f65980b74718309bad725711b497
    org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <button type="submit" class="btn kv-btn btn-magenta text-center d-inline-block" disabled="">...</button> is not clickable at point (331, 821). Other element would receive the click: <div class="form-group">...</div>
    

    Ich vermute, dass an der Seite sich irgendwas geändert hat, weswegen die automatische Buchung nicht mehr funktioniert. Hat jemand das selbe Problem derzeit? 🤔

    Es wurde auch leider nur ein Screenshot vom ersten Buchungsschritt (impf-bot-vaccination-date-YOU-DONT-CARE.png) erstellt, wobei das Problem allem Anschein nach ja erst einen Schritt später entstanden ist.

    opened by error-empire 1
  • Not able to build on manjaro linux

    Not able to build on manjaro linux

    Hello, acutally I'm not able to get the bot running. On Manjaro Linux the gradle build fails with:

    > Task :compileKotlin FAILED
    e: /home/syljo/git/impf-bot/src/main/kotlin/de/tfr/impf/ifttt/IftttClient.kt: (7, 17): Unresolved reference: http
    e: /home/syljo/git/impf-bot/src/main/kotlin/de/tfr/impf/ifttt/IftttClient.kt: (8, 17): Unresolved reference: http
    e: /home/syljo/git/impf-bot/src/main/kotlin/de/tfr/impf/ifttt/IftttClient.kt: (9, 17): Unresolved reference: http
    e: /home/syljo/git/impf-bot/src/main/kotlin/de/tfr/impf/ifttt/IftttClient.kt: (21, 26): Unresolved reference: HttpClient
    e: /home/syljo/git/impf-bot/src/main/kotlin/de/tfr/impf/ifttt/IftttClient.kt: (22, 27): Unresolved reference: HttpRequest
    e: /home/syljo/git/impf-bot/src/main/kotlin/de/tfr/impf/ifttt/IftttClient.kt: (27, 34): Unresolved reference: HttpResponse
    e: /home/syljo/git/impf-bot/src/main/kotlin/de/tfr/impf/ifttt/IftttClient.kt: (38, 42): Unresolved reference: HttpRequest
    e: /home/syljo/git/impf-bot/src/main/kotlin/de/tfr/impf/ifttt/IftttClient.kt: (43, 12): Unresolved reference: HttpRequest
    
    FAILURE: Build failed with an exception.
    

    When trying to use docker I get a different error message in the container:

    Current browser version is 90.0.4430.93 with binary path /usr/bin/chromium
    Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    System info: host: '18a6139af3be', ip: '172.18.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.41-1-MANJARO', java.version: '11.0.11'
    Driver info: driver.version: ChromeDriver
    remote stacktrace: #0 0x55f6bcb02949 <unknown>
    
    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    	at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
    	at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
    	at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
    	at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
    	at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
    	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    	at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
    	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
    	at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
    	at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
    	at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
    	at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    	at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    	at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
    	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
    	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)
    	at de.tfr.impf.selenium.DriverFactoryKt.createDriver(DriverFactory.kt:19)
    	at de.tfr.impf.ReportJob.<init>(ReportJob.kt:16)
    	at de.tfr.impf.StartKt.main(Start.kt:4)
    	at de.tfr.impf.StartKt.main(Start.kt)
    
    > Task :run FAILED
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':run'.
    > Process 'command '/usr/lib/jvm/java-11-openjdk-amd64/bin/java'' finished with non-zero exit value 1
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 13s
    3 actionable tasks: 2 executed, 1 up-to-date
    

    So at the end both approaches does not work for me.

    Any ideas are warmly welcome :-)

    Cheers Jörg

    opened by jogi4github 0
  • element click intercepted: Element <span>...</span> is not clickable at point (231,332). Other element would receive the click

    element click intercepted: Element ... is not clickable at point (231,332). Other element would receive the click

    Hallo Erstmal dankeschön für den Bot! Läuft einwandfrei auf meinem PC, allerdings bin ich die nächsten Tage nicht in dessen Reichweite und wollte das ganze jetzt noch auf meinem Laptop zum laufen bringen. Allerdings bekomme ich folgende Fehlermeldung:

    03.06 22:54:53 DEBUG ReportJob - Choose State: Bitte auswählen
    03.06 22:54:54 ERROR ReportJob - Failed to check location:  76646 Bruchsal-Heidelsheim
    element click intercepted: Element <span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-disabled="false" aria-labelledby="select2-qvvo-container">...</span> is not clickable at point (231, 332). Other element would receive the click: <p _ngcontent-nfa-c38="" class="pb-3 pb-md-0">...</p>
      (Session info: chrome=91.0.4472.77)
    Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    System info: host: 'name', ip: 'ip', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_291'
    Driver info: org.openqa.selenium.chrome.ChromeDriver
    Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 91.0.4472.77, chrome: {chromedriverVersion: 90.0.4430.24 (4c6d850f087da..., userDataDir: C:\Users\username\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:52831}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
    Session ID: id
    org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-disabled="false" aria-labelledby="select2-qvvo-container">...</span> is not clickable at point (231, 332). Other element would receive the click: <p _ngcontent-nfa-c38="" class="pb-3 pb-md-0">...</p>
      (Session info: chrome=91.0.4472.77)
    Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    System info: host: 'name', ip: 'ip', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_291'
    Driver info: org.openqa.selenium.chrome.ChromeDriver
    Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 91.0.4472.77, chrome: {chromedriverVersion: 90.0.4430.24 (4c6d850f087da..., userDataDir: C:\Users\username\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:52831}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
    Session ID: 2a147d3d8176acb13615027d71ce4aaa
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    	at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    	at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    	at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    	at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    	at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    	at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285)
    	at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)
    	at de.tfr.impf.ReportJob.openMainPage(ReportJob.kt:215)
    	at de.tfr.impf.ReportJob.checkLocation(ReportJob.kt:55)
    	at de.tfr.impf.ReportJob.checkLocations(ReportJob.kt:45)
    	at de.tfr.impf.ReportJob.reportFreeSlots(ReportJob.kt:38)
    	at de.tfr.impf.StartKt.main(Start.kt:4)
    	at de.tfr.impf.StartKt.main(Start.kt)
    

    Bin leider überfragt woran das hängen kann. (Habe die selbe Version schließlich auf dem PC problemlos zum laufen gebracht).

    Habe mir das aktuelle Repo auch noch runtergeladen, in der Hoffnung, dass der Fehler dort nicht auftritt. Da bekomme ich aber schon beim build Probleme mit (" \IfttClient.kit: unsolved reference http")

    Wäre froh, wenn mir jemand weiterhelfen könnte!

    opened by reggydick 0
  • Chromedriver sucht nach version 91, was in Debian buster nicht verfügbar ist

    Chromedriver sucht nach version 91, was in Debian buster nicht verfügbar ist

    In der Docker Datei wird chromium=90.0.4430.212-1~deb10u1 installiert, was völlig richtig ist. Dabei handelt es um die letzte Version im repo. Aber wenn Sie den Container ausführen, sucht der Treiber-Downloader nach dem Chrome 91 Treiber.

    Ich habe es so repariert: WebDriverManager.chromedriver().driverVersion("90.0.4430.212").setup();

    opened by piechade 6
  • Timeout für die Termin-Reservierung zurücksetzen?

    Timeout für die Termin-Reservierung zurücksetzen?

    Moin zusammen! Erst mal vielen Dank für die tolle Software! 👏 Ich konnte darüber schon für zwei Personen Termine buchen! 😀 Was mir allerdings schon öfter aufgefallen ist: Der Timeout für die Terminreservierung startet bei nachfolgenden Anfragen (also der zweiten, dritten, vierten, etc. Impfzentrumsanfrage) nicht neu bei 10m, sondern lässt den "alten" Timer runterzählen bis er bei 0 Sekunden angekommen ist und startet erst danach neu. Dadurch entsteht die Situation, dass Termine nur noch wenige Minuten oder unter Umständen sogar nur wenige Sekunden verfügbar sind.

    Besteht die Möglichkeit dieses Verhalten anzupassen? Z.B. Durch eine Skriptanpassung (indem beispielsweise nach jeder Suchanfrage der Browser neu gestartet wird) oder evtl. durch eine Browser-Einstellung im Chrome?

    Viele Grüße Timo

    opened by error-empire 4
Owner
Tobse
🐱‍👤 Kotlin Fanboy 🧹Clean Coder        🎮 Gaming Nerd  🦾 3D Printer             📸 Hobby Photographer 😎 Father
Tobse
A lightweight, feature-rich wrapper for the Telegram Bot API, providing a handy Kotlin DSL to quickly build your bot.

Kotlin Telegram Bot Kotlin based wrapper over Telegram API. Current version of the Telegram Api: 6.0 Principles Annotations Magic. The basic interacti

Jey 61 Dec 27, 2022
Synapse Moderation Bot - A bot for managing and moderating our community Discord server

Synapse Moderation Bot A bot for managing and moderating our community Discord server. Note This bot is not public. While you can host it on your own,

Synapse Technologies, LLC 1 Jul 16, 2022
Vkontakte API bot for trading VK Coin

Sweet Coin Market Vkontakte API bot for trading VK Coin. Please star this repo if you like ⭐ It's motivates me a lot! Yes, you can use the source code

null 2 Jan 28, 2022
AsukaBot - A simple Kotlin Discord Bot

The Discord bot of the serber, a private Discord server. Asuka is a Discord But running on the JDA API but made in kotlin.

Yann ItzPeaxel 2 Apr 24, 2022
A Chat-Bot Android Application

Sekobanashi_App A Chat-Bot Android Application. Features App Sekobanashi is a chat-bot/assistant android application where the user can chat with one

Siddharth Singh 1 Jan 7, 2022
KarboTipun - Karbo Tipun Bot For Android

KARBO TIPUN BOT Welcome to Karbo tip bot. You can tell me to tip users with KRB

Ruslan Sheremet 0 Jan 9, 2022
Urban Dictionary discord bot.

Urban Dictionary Installation & Setup 1. Clone the repository git clone https://github.com/thexxiv/urbandictionary-discord-bot.git 2. Navigate to the

XXIV 0 Jan 17, 2022
DiscordBot - Small Discord bot using JDA

Discord bot written in kotlin and using JDA Use it yourself ./gradlew build crea

chell 2 Feb 2, 2022
GoogleSearchBot - Google Search Bot With Kotlin

GoogleSearchBot Simple telegram bot on kotlin with spring framework With command

Kirill Golovin 1 Feb 7, 2022
Based on mirai, a fast simple bot for maimai DX

maimai-bot 一个基于 mirai 和 舞萌 DX 查分器 编写的 maimai DX QQ 机器人插件。

心水湛清 20 Dec 16, 2022
A small bot for gitlab notification

Welcome to gitty ?? A small bot for gitlab notification with integration on different platform Usage You gotta change variables in .env on your own do

Starchenko Ilya 1 Nov 2, 2022
TimmyBot is a discord bot based on Discord4J and LavaPlayer

TimmyBot TimmyBot is a discord bot based on Discord4J and LavaPlayer Invite Click here to invite Timmy to your server Commands ?play - Plays a song, e

Ian de Villiers 0 Apr 21, 2022
A simple Discord bot that aims to provide a snapshot of the join logs given a range of time for servers.

?? What is Humpy Dumpy? Humpy Dumpy is a simple Discord bot that aims to provide a snapshot of the join logs given a range of time for servers. It was

Miu 2 Aug 29, 2022
A Discord bot heavily inspired by Ultimate Bravery to spice up your Pokemon Unite experience.

UniteBraveryBot ?? A Discord bot heavily inpired by Ultimate Bravery to spice up your Pokemon Unite experience. Required Permissions ?? View Channels

Alexander Deledda 2 Sep 8, 2022
A repository that contains various examples of how to use the telegram-bot library.

Telegram-bot templates This repository contains simple different examples of how to use the telegram-bot library. How to use All the examples are conv

Jey 3 Nov 15, 2022
All things generative! Discord Bot

Thingy Discord bot to generate images based on a text prompt - way more than just that! Through a wide variety of tools, you can alter your generated

Peter Willemsen 17 Dec 15, 2022
Simple configurable Twitch Chat Bot for Emote Repetition 😎

DopaminChatter Dopamin is the happiness hormone. What's better than a Twitch Chat with great Emote Usage and Emote Chains (same Emotes after another).

Jakob 2 Dec 9, 2022
Simple Telegram bot that responds with list of results obtained from Google.

Simple project focused on learning a little more about how Telegram bots work and are created. The bot has a very basic functionality: the user types

Jesus Ericks 3 Nov 13, 2022
German public broadcasting live streams as an Android app

Über FAQ Changelog Bibliotheken Über Zapp ist Teil von MediathekView und gibt dir einen schnellen Zugang zu vielen deutschen öffentlich-rechtlichen Fe

MediathekView 140 Jan 1, 2023
Obsi-bot: the next generation discord utility bot 🔥

obsi-bot obsi-bot is the next generation discord utility bot. It is developed in Kotlin using kordex and kord Help me translating Feel free to help me

mooziii 2 Nov 7, 2022