IRC Bot zu Automaischer ansage von NowPlay

Mein Gott es ist so einfach und doch so schwer gewesen ein blödes Bot zu schreiben der nichts anderes macht wie in Gewünschten IRC Server reinzukommen und in ein gewünschten Channel die Songtitel rein zu posten. Außerdem Registriert sich der Bot auf den Server so das sein Nick nicht geklaut werden kann.

Ich habe das ganze mit Python3 realisiert d.h. man muss denn Skript als .py speichern und darauf achten das es in UTF-8 gespeichert wird, weil es sonnst schwierig sein wird mit umlauten.

Es sollen die Erweiterungen IRC und Reusests bei Python installiert sein.

Die Pakete sollten installiert werden

pip install irc requests

Wenn der Bot in euren IRC Channel reinkommt und sich registriert hat solltet ihr ihm +v geben

Hier ist der Code der nach euren Bedürfnissen angepasst werden sollte

# -*- coding: utf-8 -*-

import irc.bot
import irc.connection
import requests
import time
import threading

# Konfigurationsparameter
server = "irc.example.com"  # IRC-Serveradresse
port = 6667  # Portnummer des IRC-Servers
channel = "#default"  # Name des IRC-Kanals, dem der Bot beitreten soll
botnick = "NowPlayingBot"  # Nickname des Bots
nickserv_email = "bot@example.com"  # E-Mail-Adresse für die Registrierung bei NickServ
nickserv_password = "XXXXXX"  # Passwort für die Registrierung und Identifikation bei NickServ
current_song_url = "http://0.0.0.0:0000/currentsong?sid=1"  # URL zum Abrufen des aktuellen Songs
check_interval = 35  # Sekundenintervall für das Überprüfen des aktuellen Songs
radio_link = "https://radio-hazzardofdarkness.de/"  # Link zur Radiowebseite

class NowPlayingBot(irc.bot.SingleServerIRCBot):
    def __init__(self, channel, nickname, server, port):
        # Initialisierung des Bots und Verbindung zum IRC-Server
        irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname)
        self.channel = channel
        self.last_song = None
        self.connected = False
        self.identified = False
        print(f"Bot initialized with nickname {nickname}, server {server}, port {port}")

    def on_welcome(self, connection, event):
        # Dem Kanal beitreten, sobald die Verbindung hergestellt ist
        print("Connected to server. Joining channel...")
        connection.join(self.channel)

    def on_join(self, connection, event):
        # Überprüfung der Registrierung, sobald der Bot dem Kanal beigetreten ist
        if event.source.nick == self.connection.get_nickname():
            print(f"Joined {self.channel}. Checking registration...")
            self.identify_with_nickserv(connection)

    def identify_with_nickserv(self, connection):
        # Identifizieren des Bots bei NickServ
        print("Identifying bot with NickServ")
        connection.privmsg("NickServ", f"IDENTIFY {nickserv_password}")

    def on_mode(self, connection, event):
        # Überprüfen, ob ChanServ dem Bot +v gesetzt hat
        if event.arguments and event.arguments[0] == '+v' and event.arguments[1] == self.connection.get_nickname():
            print("Bot is identified and has voice in the channel.")
            self.identified = True
            connection.privmsg(self.channel, "Hallo, ich bin der Musik Bot")
            self.connected = True

    def on_privmsg(self, connection, event):
        # Verarbeitung von privaten Nachrichten, insbesondere von NickServ
        print(f"Received message from {event.source.nick}: {event.arguments[0]}")
        if event.source.nick == "NickServ":
            if "You are now identified" in event.arguments[0]:
                print("Bot is identified.")
                self.identified = True
            elif "This nickname is registered" in event.arguments[0]:
                print("Bot is not identified. Starting registration...")
                connection.privmsg(self.channel, "Moment mal, ich muss mich erstmal registrieren")
                self.register_with_nickserv(connection)

    def register_with_nickserv(self, connection):
        # Registrierungsnachricht an NickServ senden
        print("Registering bot with NickServ")
        connection.privmsg("NickServ", f"REGISTER {nickserv_password} {nickserv_email}")
        time.sleep(5)
        # Identifizieren des Bots nach der Registrierung
        self.identify_with_nickserv(connection)

    def get_current_song(self):
        # Abrufen des aktuellen Songs von der angegebenen URL
        try:
            response = requests.get(current_song_url)
            return response.text.strip()
        except requests.RequestException as e:
            # Fehlerbehandlung beim Abrufen des aktuellen Songs
            print("Fehler beim Abrufen des aktuellen Songs:", e)
            return None

    def check_song(self):
        # Überprüfen, ob sich der aktuelle Song geändert hat
        if self.connected:
            current_song = self.get_current_song()
            if current_song and current_song != self.last_song:
                # Nachricht mit dem aktuellen Song in den Kanal senden
                message = (
                    f"Now Playing : {current_song} "
                    f" Willst du zuhören? {radio_link}"
                )
                self.connection.privmsg(self.channel, message)
                print(f"Now Playing: {current_song}")
                self.last_song = current_song

    def start_checking(self):
        # Regelmäßiges Überprüfen des aktuellen Songs
        while True:
            self.check_song()
            time.sleep(check_interval)

def main():
    # Initialisierung und Start des Bots
    bot = NowPlayingBot(channel, botnick, server, port)
    bot_thread = threading.Thread(target=bot.start)
    bot_thread.start()
    bot.start_checking()

if __name__ == "__main__":
    main()

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert