Weitere ähnliche Inhalte Ähnlich wie Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug (15) Mehr von Yusuke Yamamoto (20) Kürzlich hochgeladen (12) Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug7. 先行研究 - HUBOT
• Node.jsで動作するボットフレームワーク
• HipChat、Twitter、IRC等々多彩なチャネルに対応
• 様々なサードパーティープラグインが存在
• Herokuなどに手軽にデプロイ可能
10. 実装してみた
• echo ボット
public class BotMain {
public static void main(String[] args) {
Twitter twitter = TwitterFactory.getSingleton();
TwitterStream twitterStream = TwitterStreamFactory.getSingleton();
twitterStream.addListener(new UserStreamAdapter() {
@Override
public void onDirectMessage(DirectMessage directMessage) {
String[] args = directMessage.getText().trim().split(" ");
String command = args[0];
switch (command.toLowerCase()) {
case "echo":
twitter.sendDirectMessage(YUSUKE, args[1]);
break;
default:
twitter.sendDirectMessage(YUSUKE,
"invalid args:" + Arrays.toString(args));
}
});
twitterStream.user();
}
}
26. 古き良きJava過ぎる
• 匿名クラス、switchでコマンド分岐とかダサい
twitterStream.addListener(new UserStreamAdapter() {
@Override
public void onDirectMessage(DirectMessage directMessage) {
String[] args = directMessage.getText().trim().split(" ");
String command = args[0];
switch (command.toLowerCase()) {
case "echo":
twitter.sendDirectMessage(YUSUKE, args[1]);
break;
default:
twitter.sendDirectMessage(YUSUKE,
"invalid args:" + Arrays.toString(args));
}
});
twitterStream.user();
}
}
29. 流れるようにBotを実装
public static void main(String[] args) {
new Jenkinsan()
.onMention("echo",
(status, twitter) -> twitter.reply(status.getText()))
.onMention(“hello",
(status, twitter) -> twitter.reply("Hello world!"))
.start();
}
echoコマンドを受けたらそのままリプライ
helloコマンドを受けたらHello Worldと返す
32. ユーティリティオブジェクトのインターフェース
class TwitterWrapper{
public void updateStatus(String text);
public void reply(String text);
public void updateStatus(StatusUpdate status);
public void sendDirectMessage(String message);
}
onMention(BiConsumer<Status, TwitterWrapper> c)
@ツイートで返信、ダイレクトメッセージ送信など
例外を投げない便利メソッドを搭載
33. ユーティリティオブジェクトの効果
Twitter twitter = TwitterFactory.getSingleton();
new Kagechiyo()
.onMention("help",
(message) -> {
try {
twitter.updateStatus(String.format("@%s %s", message.getUser().getScreenName(), "ググレカス"));
} catch (TwitterException e) {
e.printStackTrace();
}
})
.start();
new Kagechiyo()
.onDirectMessage("help",
(message, twitter) -> twitter.sendDirectMessage("ググレカス"))
.start();
Lambda万歳
Lambdaうざい