Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet

Einführung

Ich habe versucht, einen Mastodon-Bot zu erstellen, und es war überraschend einfach, also werde ich es zusammenfassen. Die einzige Bibliothek, die verwendet werden kann, ist "Mastodon.py". Bitte leiten Sie sie im Voraus weiter.

Grundeinstellung

Erhalten Sie zunächst die Informationen zur Registrierung und Authentifizierung der Anwendung auf der Mastodon-Seite. Es ist in Ordnung, dies zu Beginn einmal zu tun. Löschen Sie es also oder kommentieren Sie es aus, wenn Sie fertig sind.

setup.py



    from mastodon import Mastodon

    url = "imastodon.net"  #Adresse der zu verwendenden Instanz

    Mastodon.create_app("OtakuCDDB",  #Lassen Sie uns den Kundennamen frei entscheiden
                        api_base_url=url,
                        to_file="cred.txt"
                        )

    mastodon = Mastodon(
        client_id="cred.txt",
        api_base_url=url
    )

    mastodon.log_in(
        "****@*****",  #Login-E-Mail-Adresse
        "******",  #Passwort
        to_file="auth.txt"
    )

Ich habe es in den Authentifizierungsinformationen cred.txt und auth.txt gespeichert, damit ich es ab dem nächsten Mal für die Authentifizierung verwenden kann. Der Clientschlüssel und das Clientgeheimnis werden übrigens in cred.txt und das Zugriffstoken in auth.txt gespeichert.

Bot Körper

Jetzt machen wir den Bot-Körper. Dieses Mal erstellen wir einen Bot, der auf die API trifft und das Ergebnis basierend auf dem in der Antwort gesendeten Inhalt zurückgibt.

bot.py


from mastodon import Mastodon, StreamListener
import requests

class Stream(StreamListener):
    def __init__(self): #Erbe
        super(Stream, self).__init__()
        # self.logger = logging.getLogger

    def on_notification(self,notif): #Wird aufgerufen, wenn eine Benachrichtigung eingeht
        if notif['type'] == 'mention': #Überprüfen Sie, ob der Inhalt der Benachrichtigung eine Antwort ist
            content = notif['status']['content'] #Es ist der Hauptteil der Antwort
            id = notif['status']['account']['username']
            st = notif['status']
            main(content, st, id)

def main(content,st,id):
    req = content.rsplit(">")[-2].split("<")[0].strip() #Entfernen Sie zusätzliche Informationen aus dem Hauptteil der Antwort
    r_date = requests.get(url + "?title=" + req, headers="") #Hit api
    print(req)
    try:
        r = r_date.json()["Items"][0] #Verarbeiten Sie die zurückgegebenen Daten ein wenig

        resr = "\n" + "Song Titel:" + r["Title"] + "\n" + \ #Ich werde den Hauptteil der Antwort machen
               "Künstlername:" + r["Artist"] + "\n" + \
               "Vokal:" + ",".join(r["Vocal"]) + "\n" + \
               "Text:" + ",".join(r["Word"]) + "\n" + \
               "Komposition:" + ",".join(r["Composer"]) + "\n" + \
               "Anordnung:" + ",".join(r["Arranger"]) + "\n" + \
               "die Arbeit:" + ",".join(r["TieUp"]) + "\n" + \
               "Marke:" + ",".join(r["Brand"]) + "\n" + \
               "Genre:" + ",".join(r["Genre"])
    except IndexError: #Wenn die Daten nicht registriert sind, wird ein Fehler ausgegeben und behoben.
        resr = "Dieses Lied ist nicht registriert"

    mastodon.status_reply(st,
                          resr,
                          id,
                          visibility='unlisted') #Nicht aufgeführt

mastodon = Mastodon(
    client_id = "cred.txt",
    access_token = "auth.txt",
    api_base_url = "https://imastodon.net") #Beispiel

url = "https://********" #API-URL

notif = mastodon.notifications() #Erhalten Sie Benachrichtigungen
count = 0

while True:
    if notif[count]['type'] == 'mention':
        if notif[count]['status']['replies_count'] == 0: #Überprüfen Sie, ob die Antwort bereits erfolgt ist
            content = notif[count]['status']['content']
            id = notif[count]['status']['account']['username']
            st = notif[count]['status']
            main(content, st, id)
            count += 1
        else:
            break
    else:
        count += 1
    count += 1

mastodon.stream_user(Stream()) #Stream starten

Wenn Sie die Benachrichtigung bisher beim Start erhalten und keine Antwort erhalten, werden wir umgehend darauf antworten. Es ist in Ordnung, hier herumzuspringen, weil ich nur auf die Antwort antworten wollte, die geflogen ist, als das Programm nicht verfügbar war.

Sobald der Stream gestartet ist, wird on_notification (self, notif) aufgerufen, wenn die Benachrichtigung fliegt. Fügen Sie daher hier die Antwortfunktion hinzu. Es macht auch keinen Sinn, auf Neustarts oder Favoriten zu antworten. Überprüfen Sie daher, ob die Benachrichtigung eine Antwort ist. Es scheint keinen bequemen Weg zu geben, nur Antworten zu erhalten. Lassen Sie uns danach verschiedene Verarbeitungen entsprechend durchführen und die Antwort mit mastodon.status_reply überspringen das ist alles. War es nicht überraschend einfach?

Verweise

Dokumentation Beispiel mit Stream-API in Mastodon.py 50 Python Reverse Sample Codes (Mastodon API-Anfänger) [Python] Ich habe einen Mastodon-Bot erstellt und ausprobiert!

Recommended Posts

Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
Schritte zum Erstellen eines Twitter-Bots mit Python
Erstellen Sie mit Class einen Python-Funktionsdekorator
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Erstellen Sie mit Minette für Python einen LINE BOT
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Verzeichnis mit Python
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen Sie einen Twitter-BOT mit dem GoogleAppEngine SDK für Python
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
Erstellen Sie eine Nachricht, die der Lokalisierung entspricht, mit einer Python-Übersetzungszeichenfolge
5 Möglichkeiten zum Erstellen eines Python-Chatbots
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen
[Road to Intermediate Python] Rufen Sie eine Klasseninstanz wie eine Funktion mit __call__ auf
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
[Python 3.8 ~] Wie man rekursive Funktionen mit Lambda-Ausdrücken intelligent definiert
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Erstellen Sie einen Bot, um Corona-Virus-Informationen zu retweeten
Erstellen Sie automatisch eine Python-API-Dokumentation mit Sphinx
Erstellen Sie mit Python + PIL ein Dummy-Image.
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
[Python] [LINE Bot] Erstellen Sie einen LINE Bot mit Papageienrückgabe
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Machen wir einen Twitter-Bot mit Python!
Python-Anfänger haben beschlossen, einen LINE-Bot mit Flask zu erstellen (Flask-Kommentar)
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Vorgehensweise zum Erstellen einer virtuellen Python-Umgebung mit VS-Code unter Windows
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
3. Verarbeitung natürlicher Sprache mit Python 1-2. So erstellen Sie einen Korpus: Aozora Bunko
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
[Python] Listenverständnis Verschiedene Möglichkeiten zum Erstellen einer Liste
Lesen einer CSV-Datei mit Python 2/3
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Registrieren Sie Funktionsargumente automatisch in argparse in Python
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
Ich möchte mit Python ein Fenster erstellen
So erstellen Sie eine JSON-Datei in Python
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Ich möchte ein Spiel mit Python machen
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen