Hier ist eine einfache Möglichkeit, einen SlackBot in Java zu erstellen
Den vollständigen eingeführten Quellcode finden Sie unter https://github.com/riversun/slacklet-examples.git
Gehen Sie zuerst hierher und holen Sie sich das API-Token für BOT https://my.slack.com/services/new/bot
Das Protokoll ist Websocket-basiertes Slack RTM (Realtime Messaging API) und die Bibliothek ist Simple Slack API. Verwenden Sie eine Wrapper-Bibliothek namens Slacklet basierend auf -slack-api.git.
Slacklet Slacklet kann von Maven / Gradle oder direktem Download von Glas von den folgenden erhalten werden. maven/gradle Slacklet.jar direkt herunterladen
Laden Sie zunächst den zuvor erstellten BOT ein, sich einem beliebigen Kanal anzuschließen.
Dies ist ein einfaches Beispiel für die Rückgabe eines Echos, wenn jemand spricht.
Example00.java
public class Example00 {
public static void main(String[] args) throws IOException {
String botToken ="API-Token erhalten" ;
SlackletService slackService = new SlackletService(botToken);
//Slacklet hinzufügen
slackService.addSlacklet(new Slacklet() {
@Override
public void onMessagePosted(SlackletRequest req, SlackletResponse resp) {
//Nachricht vom Benutzer gepostet
//Holen Sie sich den Kanal, in dem die Nachricht gepostet wurde
SlackChannel channel = req.getChannel();
if ("random".equals(channel.getName())) {
// #Wenn es ein zufälliger Kanal wäre
//Nachrichtentext abrufen
String content = req.getContent();
//Senden Sie eine Nachricht von BOT an den Kanal, auf dem die Nachricht veröffentlicht wurde
resp.reply("「" + content + "Ich sagte.");
}
}
});
//Slacklet-Service gestartet(Mit Slack verbinden)
slackService.start();
}
}
Wenn Sie auf dem Slack "Hallo" sagen, wird das Echo vom BOT zurückgegeben.
Erstellen Sie ** SlackletService ** wie oben und fügen Sie ** Slacklet ** mit ** # addSlacklet ** hinzu. ** Slacklet ** ist wie ** Servlet ** und überschreibt die erforderlichen Methoden.
** # onMessagePosted ** wird aufgerufen, wenn ein Benutzer eine Nachricht an einen Kanal sendet. Wenn Sie antworten möchten, indem Sie den Kanal einschränken, identifizieren Sie den Kanalnamen und antworten Sie wie im obigen Beispiel.
Überschreiben Sie ** Slacklet # onDirectMessagePosted **, wenn Sie direkte Nachrichten empfangen möchten, die vom Benutzer an den BOT gesendet wurden:
@Override
public void onDirectMessagePosted(SlackletRequest req, SlackletResponse resp) {
//Eine direkte Nachricht an BOT wurde gesendet
String content = req.getContent();
//Erwähnen Sie den Benutzer, der die Nachricht gesendet hat
String mention = req.getUserDisp();
//Antworten Sie dem Benutzer, der die Direktnachricht gesendet hat
resp.reply(mention + "Vielen Dank für Ihre direkte Nachricht.\n「" + content + "Ich sagte");
}
Wenn Sie wie unten gezeigt eine direkte Nachricht an BOT senden, erhalten Sie eine Antwort.
Nachrichtenbenutzer Erwähnen Sie den BOT, wenn Sie beispielsweise ein ** "@ smilebot Hello" ** erhalten und eine Nachricht gepostet haben, wird das ** Slacklet # onMentionedMessagePosted ** wie folgt überschrieben:
@Override
public void onMentionedMessagePosted(SlackletRequest req, SlackletResponse resp) {
//Eine Nachricht mit einer Erwähnung zu diesem BOT wurde auf einem Kanal veröffentlicht(Beispiel "@smilebot Guten Morgen ")
String content = req.getContent();
String mention = req.getUserDisp();
resp.reply("Hallo," + mention + "Herr. """ + content + "Ich sagte.");
}
Sie erhalten nur dann eine Antwort, wenn Sie den BOT-Namen mit ** @username ** angeben.
Dies ist ein Beispiel für das Senden einer direkten Nachricht vom BOT an den Benutzer. Es wird verwendet, wenn Sie zuerst eine Nachricht von BOT senden möchten, anstatt auf eine Nachricht von einem Benutzer zu antworten.
public class Example02 {
public static void main(String[] args) throws IOException {
String botToken ="API-Token erhalten";
SlackletService slackService = new SlackletService(botToken);
slackService.start();
//Senden Sie eine direkte Nachricht (keine Antwort) an den Benutzer
String userName = "riversun";
slackService.sendDirectMessageTo(userName, "Hallo ~");
//Verbindung mit Durchhang beenden
slackService.stop();
}
}
Bei der Ausführung erhalten Sie eine direkte Nachricht von BOT wie folgt.
public class Example03 {
public static void main(String[] args) throws IOException {
String botToken = ResourceBundle.getBundle("credentials").getString("slack.bot_api_token");
SlackletService slackService = new SlackletService(botToken);
slackService.start();
//Senden Sie eine Nachricht (keine Antwort) an einen Kanal
String channelName = "random";
slackService.sendMessageTo(channelName, "zufälliger Kanal von allen, Hallo!");
slackService.stop();
}
}
** #random ** BOT sendet eine Nachricht an den Kanal.
Slacklet wurde für mehrere Benutzer entwickelt. Ermöglicht einem Benutzer die Interaktion mit dem BOT, während der andere Benutzer unabhängig interagiert. Um dies zu erreichen, gibt es eine Sitzungsfunktion, um verschiedene Zustände für jeden Benutzer zu speichern. Wie beim Servlet ruft ** SlackletRequest .getSession ** die Sitzung ab und enthält den Status darin.
@Override
public void onDirectMessagePosted(SlackletRequest req, SlackletResponse resp) {
String content = req.getContent();
//Holen Sie sich eine Sitzung (Sitzung ist für jeden Benutzer einzigartig)
SlackletSession session = req.getSession();
//Holen Sie sich eine Ganzzahl zum Zählen der Anzahl der Bemerkungen aus der Sitzung. Wenn noch nichts eingegeben wurde, ist der Standardwert 1.
Integer num = (Integer) session.getAttribute("num", 1);
resp.reply(req.getUserDisp() + "Ist" + num + "Das zweite Mal "" + content + "Ich sagte.");
//Aktualisieren Sie die Sitzung, indem Sie die Anzahl erhöhen
num++;
session.setAttribute("num", num);
}
Es sieht so aus, als würde der Dialog fortgesetzt, da er sich an die Anzahl der Gespräche in der Sitzung erinnert. Es wird für jeden Benutzer eindeutig gespeichert.
[** Sitzungspersistenz **] ** Kontext ** ist definitiv erforderlich, wenn ein vollwertiger Dialog implementiert werden soll. ** Kontext ** enthält den interaktiven Status, verschiedene Status usw.
[** Mehrbenutzerunterstützung **] Jeder Benutzer wird in einem separaten Thread verarbeitet, sodass der Dialog mit mehreren Benutzern gleichzeitig verarbeitet werden kann. Ich denke jedoch, dass es besser ist, die Größe der ausführbaren Datei und des Thread-Pools entsprechend der Anzahl der von BOT behandelten Benutzer anzupassen.
[** Protokoll anzeigen **] Wenn Sie Folgendes tun, wird das Protokoll an stderr ausgegeben
org.riversun.xternal.log.Logger.setEnabled(true);
[** Tiefere Expansion **] Unter Slacklet befindet sich eine Erweiterung der Simple Slack API. Wenn Sie tiefer gehen möchten, lesen Sie Simple Slack API.
Recommended Posts