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()