Voici un moyen simple de créer un SlackBot en Java
Le code source complet introduit peut être trouvé à https://github.com/riversun/slacklet-examples.git
Tout d'abord, allez ici et obtenez le jeton API pour BOT https://my.slack.com/services/new/bot
--Une fois que vous avez choisi un nom d'utilisateur BOT, cliquez sur Ajouter une intégration de bot
Le protocole est Slack RTM basé sur Websocket (API de messagerie en temps réel) et la bibliothèque est Simple Slack API. Utilisez une bibliothèque d'encapsuleurs appelée Slacklet basée sur -slack-api.git).
Slacklet Slacklet peut être obtenu à partir de maven / gradle ou téléchargement direct de jar à partir de ce qui suit. maven/gradle Télécharger slacklet.jar directement
Tout d'abord, invitez le BOT que vous avez créé précédemment à rejoindre n'importe quelle chaîne.
Ceci est un exemple simple de retour d'un écho tel qu'il est lorsque quelqu'un parle.
Example00.java
public class Example00 {
public static void main(String[] args) throws IOException {
String botToken ="Jeton d'API obtenu" ;
SlackletService slackService = new SlackletService(botToken);
//Ajouter un slacklet
slackService.addSlacklet(new Slacklet() {
@Override
public void onMessagePosted(SlackletRequest req, SlackletResponse resp) {
//Message publié par l'utilisateur
//Obtenez la chaîne sur laquelle le message a été publié
SlackChannel channel = req.getChannel();
if ("random".equals(channel.getName())) {
// #Si c'était un canal aléatoire
//Obtenir le corps du message
String content = req.getContent();
//Envoyer un message du BOT au canal sur lequel le message a été publié
resp.reply("「" + content + "J'ai dit.");
}
}
});
//Lancement du service slacklet(Connectez-vous à Slack)
slackService.start();
}
}
Si vous dites "Bonjour" sur le Slack, il sera renvoyé en écho du BOT.
Créez ** SlackletService ** comme ci-dessus et ajoutez ** Slacklet ** avec ** # addSlacklet **. ** Slacklet ** est comme ** Servlet **, remplaçant les méthodes requises.
** # onMessagePosted ** est appelé lorsqu'un utilisateur publie un message sur une chaîne. Si vous souhaitez répondre en limitant le canal, identifiez le nom du canal et répondez comme dans l'exemple ci-dessus.
Remplacez ** Slacklet # onDirectMessagePosted ** si vous souhaitez recevoir des messages directs publiés sur le BOT par l'utilisateur:
@Override
public void onDirectMessagePosted(SlackletRequest req, SlackletResponse resp) {
//Un message direct adressé à BOT a été publié
String content = req.getContent();
//Obtenir la mention de l'utilisateur qui a envoyé le message
String mention = req.getUserDisp();
//Répondre à l'utilisateur qui a envoyé le message direct
resp.reply(mention + "Merci pour votre message direct.\n「" + content + "J'ai dit");
}
Si vous envoyez un message direct au BOT comme indiqué ci-dessous, vous recevrez une réponse.
Utilisateur du message Mentionnez le BOT, par exemple, si vous souhaitez recevoir un ** "@ smilebot Hello" ** et publier un message remplacera le ** Slacklet # onMentionedMessagePosted ** comme suit:
@Override
public void onMentionedMessagePosted(SlackletRequest req, SlackletResponse resp) {
//Un message avec une mention à ce BOT a été publié sur une chaîne(Exemple "@smilebot Bonjour ")
String content = req.getContent();
String mention = req.getUserDisp();
resp.reply("Bonjour," + mention + "M. "" + content + "J'ai dit.");
}
Vous ne recevrez une réponse que lorsque vous mentionnerez le nom du BOT avec ** @username **.
Ceci est un exemple d'envoi d'un message direct du BOT à l'utilisateur. Il est utilisé lorsque vous souhaitez d'abord envoyer le message à partir du BOT au lieu de répondre au message de l'utilisateur.
public class Example02 {
public static void main(String[] args) throws IOException {
String botToken ="Jeton d'API obtenu";
SlackletService slackService = new SlackletService(botToken);
slackService.start();
//Envoyer un message direct (pas une réponse) à l'utilisateur
String userName = "riversun";
slackService.sendDirectMessageTo(userName, "Bonjour ~");
//Connexion d'extrémité avec mou
slackService.stop();
}
}
Une fois exécuté, vous recevrez un message direct de BOT comme celui-ci.
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();
//Envoyer un message (pas une réponse) à une chaîne
String channelName = "random";
slackService.sendMessageTo(channelName, "canal aléatoire de tout le monde, Bonjour!");
slackService.stop();
}
}
** #random ** BOT envoie un message à la chaîne.
Slacklet est conçu pour le multi-utilisateur. Permet à un utilisateur d'interagir avec le BOT tandis que l'autre utilisateur interagit indépendamment. Pour ce faire, il existe une fonction de session permettant de conserver différents états pour chaque utilisateur. Comme avec le servlet, ** SlackletRequest .getSession ** obtient la session et y conserve l'état.
@Override
public void onDirectMessagePosted(SlackletRequest req, SlackletResponse resp) {
String content = req.getContent();
//Obtenir une session (la session est unique à chaque utilisateur)
SlackletSession session = req.getSession();
//Obtenez un entier pour compter le nombre de remarques de la session. Si rien n'est encore entré, la valeur par défaut est 1.
Integer num = (Integer) session.getAttribute("num", 1);
resp.reply(req.getUserDisp() + "Est" + num + "La deuxième fois "" + content + "J'ai dit.");
//Mettre à jour la session en incrémentant le nombre de fois
num++;
session.setAttribute("num", num);
}
Il semble que le dialogue se poursuive car il se souvient du nombre de conversations dans la session. Il est stocké uniquement pour chaque utilisateur.
[** Persistance de session **] ** Le contexte ** est absolument nécessaire lors de la mise en œuvre d'un dialogue à part entière. ** Contexte ** contient le statut interactif, divers statuts, etc.
L'implémentation par défaut de Slacklet conserve la session en mémoire, donc vous l'oubliez lorsque vous quittez le programme. Si vous souhaitez conserver la session, implémentez SletPersistManager qui inclut le code de persistance. Ensuite, définissez-le avec ** SlackletService # setSessionPersistenceManager **.
[** Assistance multi-utilisateurs **] Chaque utilisateur est traité dans un thread séparé afin que le dialogue avec plusieurs utilisateurs puisse être traité en même temps, mais je pense qu'il est préférable d'ajuster la taille de l'exécutable et du pool de threads de manière appropriée en fonction du nombre d'utilisateurs gérés par BOT.
[** Afficher le journal **] Si vous procédez comme suit, le journal sera envoyé vers stderr
org.riversun.xternal.log.Logger.setEnabled(true);
[** Expansion plus profonde **] Ci-dessous Slacklet se trouve une extension de l 'API Simple Slack. Si vous souhaitez approfondir, vous pouvez vous référer à Simple Slack API.
Recommended Posts