commit 0f49dc22288afc5f13275dd4798d1af6277e45d0 Author: Mark Vainomaa Date: Sat Sep 24 21:00:30 2016 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40d56b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +# ---> Java +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# IntelliJ IDEA +*.iml +.idea/ + +# Maven +target/ +dependency-reduced-pom.xml diff --git a/README.md b/README.md new file mode 100644 index 0000000..fddb2f0 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Mäerahn + +Telegram bot written in Java. See https://telegram.me/maerahnu\_bot + +## Configuration +Put bot token and it's username into corresponding environment variables `TG_TOKEN` and `TG_BOTNAME` diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..18be8c3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,106 @@ + + + 4.0.0 + + eu.mikroskeem.bot + maerahn + 0.0.1-SNAPSHOT + + + 1.8 + eu.mikroskeem.bot.maerahn.Bootstrap + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + ${jdk.version} + ${jdk.version} + + + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.3 + + + package + + shade + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${jar.mainclass} + + + + + + clean compile package + + + + jitpack.io + https://jitpack.io + + + + + + + org.slf4j + slf4j-api + 1.7.21 + + + ch.qos.logback + logback-classic + 1.1.7 + + + + + org.projectlombok + lombok + 1.16.10 + provided + + + + + com.github.rubenlagus + TelegramBots + v2.3.5 + + + + \ No newline at end of file diff --git a/src/main/java/eu/mikroskeem/bot/maerahn/Bootstrap.java b/src/main/java/eu/mikroskeem/bot/maerahn/Bootstrap.java new file mode 100644 index 0000000..0178a2f --- /dev/null +++ b/src/main/java/eu/mikroskeem/bot/maerahn/Bootstrap.java @@ -0,0 +1,22 @@ +package eu.mikroskeem.bot.maerahn; + +import org.telegram.telegrambots.TelegramApiException; +import org.telegram.telegrambots.TelegramBotsApi; + + +public class Bootstrap { + private TelegramBotsApi telegramBotsApi; + + private Bootstrap(){ + /* Initialize bot base */ + telegramBotsApi = new TelegramBotsApi(); + try { + telegramBotsApi.registerBot(new Bot()); + } catch (TelegramApiException e){ + e.printStackTrace(); + } + } + public static void main(String... args){ + new Bootstrap(); + } +} \ No newline at end of file diff --git a/src/main/java/eu/mikroskeem/bot/maerahn/Bot.java b/src/main/java/eu/mikroskeem/bot/maerahn/Bot.java new file mode 100644 index 0000000..5b5e2fd --- /dev/null +++ b/src/main/java/eu/mikroskeem/bot/maerahn/Bot.java @@ -0,0 +1,42 @@ +package eu.mikroskeem.bot.maerahn; + +import eu.mikroskeem.bot.maerahn.commands.LennyCommand; +import eu.mikroskeem.bot.maerahn.commands.ShrugCommand; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.telegram.telegrambots.api.objects.Update; +import org.telegram.telegrambots.bots.TelegramLongPollingCommandBot; + +public class Bot extends TelegramLongPollingCommandBot { + public Logger logger; + @Getter private static Bot instance; + Bot(){ + instance = this; + this.logger = LoggerFactory.getLogger("Mäerahn"); + + /* Register commands */ + //register(new FacepalmCommand(this)); + register(new ShrugCommand(this)); + register(new LennyCommand(this)); + + registerDefaultAction((sender, message)->{ + logger.info(Utils.logMessage(message)); + }); + + logger.info("Bot is ready"); + } + @Override public void processNonCommandUpdate(Update update) { + if(update.hasMessage()){ + logger.info(Utils.logMessage(update.getMessage())); + } else if(update.hasEditedMessage()){ + logger.info(Utils.logMessage(update.getEditedMessage())); + } + } + @Override public String getBotToken() { + return System.getenv("TG_TOKEN"); + } + @Override public String getBotUsername() { + return System.getenv("TG_BOTNAME"); + } +} \ No newline at end of file diff --git a/src/main/java/eu/mikroskeem/bot/maerahn/Utils.java b/src/main/java/eu/mikroskeem/bot/maerahn/Utils.java new file mode 100644 index 0000000..9c921aa --- /dev/null +++ b/src/main/java/eu/mikroskeem/bot/maerahn/Utils.java @@ -0,0 +1,76 @@ +package eu.mikroskeem.bot.maerahn; + +import org.telegram.telegrambots.TelegramApiException; +import org.telegram.telegrambots.api.methods.GetFile; +import org.telegram.telegrambots.api.objects.Chat; +import org.telegram.telegrambots.api.objects.File; +import org.telegram.telegrambots.api.objects.Message; +import org.telegram.telegrambots.api.objects.User; + +public class Utils { + public static String logMessage(Message message){ + return getChatText(message); + } + private static String getChatText(Message message){ + if(message.hasText()){ + if(message.getEditDate() != null){ + return String.format("(edited: %s) %s > %s", + message.getEditDate(), + getChatName(message), + message.getText()); + } else { + return String.format("%s > %s", + getChatName(message), + message.getText()); + } + } else { + return String.format("%s > %s", + getChatName(message), + getMessageType(message)); + } + } + private static String getChatName(Message message){ + Chat chat = message.getChat(); + if(chat.isGroupChat() || chat.isSuperGroupChat() || chat.isChannelChat()){ + return String.format("[%s] %s", getSender(message.getFrom()), chat.getTitle()); + } else if (chat.isUserChat()){ + return getSender(message.getFrom()); + } + return ""; + } + private static String getSender(User user){ + String fn = user.getFirstName(); + String ln = user.getLastName(); + String un = user.getUserName(); + return String.format("%s %s (%s)", fn, ln, un); + } + private static String getMessageType(Message message){ + if(message.getSticker() != null){ + /* Fetch sticker */ + String fileId = message.getSticker().getFileId(); + GetFile stickerFile = new GetFile(); + stickerFile.setFileId(fileId); + + String stickerPath; + try { + File file = Bot.getInstance().getFile(stickerFile); + stickerPath = file.getFilePath(); + } catch (TelegramApiException e){ + e.printStackTrace(); + stickerPath = ""; + } + return String.format("Sticker (%s)", stickerPath); + } else if(message.getAudio() != null){ + return "(Audio file)"; + } else if(message.getPhoto() != null){ + return "(Picture file)"; + } else if(message.getDocument() != null){ + return "(Document file)"; + } else if(message.getNewChatMember() != null){ + return String.format("[New member %s]", getSender(message.getNewChatMember())); + } else if(message.getNewChatTitle() != null){ + return String.format("[New chat title '%s']", message.getNewChatTitle()); + } + return "(undefined)"; + } +} \ No newline at end of file diff --git a/src/main/java/eu/mikroskeem/bot/maerahn/commands/FacepalmCommand.java b/src/main/java/eu/mikroskeem/bot/maerahn/commands/FacepalmCommand.java new file mode 100644 index 0000000..d16ba99 --- /dev/null +++ b/src/main/java/eu/mikroskeem/bot/maerahn/commands/FacepalmCommand.java @@ -0,0 +1,21 @@ +package eu.mikroskeem.bot.maerahn.commands; + +import eu.mikroskeem.bot.maerahn.Bot; +import org.slf4j.Logger; +import org.telegram.telegrambots.api.methods.send.SendSticker; +import org.telegram.telegrambots.api.objects.Chat; +import org.telegram.telegrambots.api.objects.User; +import org.telegram.telegrambots.bots.AbsSender; +import org.telegram.telegrambots.bots.commands.BotCommand; + +public class FacepalmCommand extends BotCommand { + Logger logger; + public FacepalmCommand(Bot bot){ + super("facepalm", "Send facepalm sticker"); + logger = bot.logger; + } + @Override public void execute(AbsSender absSender, User user, Chat chat, String[] strings) { + //SendSticker sticker = new SendSticker(); + //sticker.set + } +} \ No newline at end of file diff --git a/src/main/java/eu/mikroskeem/bot/maerahn/commands/LennyCommand.java b/src/main/java/eu/mikroskeem/bot/maerahn/commands/LennyCommand.java new file mode 100644 index 0000000..d41a75d --- /dev/null +++ b/src/main/java/eu/mikroskeem/bot/maerahn/commands/LennyCommand.java @@ -0,0 +1,30 @@ +package eu.mikroskeem.bot.maerahn.commands; + +import eu.mikroskeem.bot.maerahn.Bot; +import org.slf4j.Logger; +import org.telegram.telegrambots.TelegramApiException; +import org.telegram.telegrambots.api.methods.send.SendMessage; +import org.telegram.telegrambots.api.objects.Chat; +import org.telegram.telegrambots.api.objects.User; +import org.telegram.telegrambots.bots.AbsSender; +import org.telegram.telegrambots.bots.commands.BotCommand; + +public class LennyCommand extends BotCommand { + Logger logger; + public LennyCommand(Bot bot){ + super("lenny", "Send Lenny Face"); + logger = bot.logger; + } + @Override public void execute(AbsSender absSender, User user, Chat chat, String[] strings) { + SendMessage message = new SendMessage(); + message.setChatId(chat.getId().toString()); + message.setText("( ͡° ͜ʖ ͡°)"); + + try { + absSender.sendMessage(message); + } catch (TelegramApiException e){ + logger.error("Failed to send reply for /lenny command!"); + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/eu/mikroskeem/bot/maerahn/commands/ShrugCommand.java b/src/main/java/eu/mikroskeem/bot/maerahn/commands/ShrugCommand.java new file mode 100644 index 0000000..46ac7fc --- /dev/null +++ b/src/main/java/eu/mikroskeem/bot/maerahn/commands/ShrugCommand.java @@ -0,0 +1,29 @@ +package eu.mikroskeem.bot.maerahn.commands; + +import eu.mikroskeem.bot.maerahn.Bot; +import org.slf4j.Logger; +import org.telegram.telegrambots.TelegramApiException; +import org.telegram.telegrambots.api.methods.send.SendMessage; +import org.telegram.telegrambots.api.objects.Chat; +import org.telegram.telegrambots.api.objects.User; +import org.telegram.telegrambots.bots.AbsSender; +import org.telegram.telegrambots.bots.commands.BotCommand; + +public class ShrugCommand extends BotCommand { + Logger logger; + public ShrugCommand(Bot bot){ + super("shrug", "Send shrug"); + logger = bot.logger; + } + @Override public void execute(AbsSender absSender, User user, Chat chat, String[] strings) { + SendMessage message = new SendMessage(); + message.setChatId(chat.getId().toString()); + message.setText("¯\\_(ツ)_/¯"); + try { + absSender.sendMessage(message); + } catch (TelegramApiException e){ + logger.error("Failed to send reply for /shrug command!"); + e.printStackTrace(); + } + } +} \ No newline at end of file