Initial commit
This commit is contained in:
commit
0f49dc2228
21
.gitignore
vendored
Normal file
21
.gitignore
vendored
Normal file
@ -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
|
6
README.md
Normal file
6
README.md
Normal file
@ -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`
|
106
pom.xml
Normal file
106
pom.xml
Normal file
@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>eu.mikroskeem.bot</groupId>
|
||||
<artifactId>maerahn</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<jdk.version>1.8</jdk.version>
|
||||
<jar.mainclass>eu.mikroskeem.bot.maerahn.Bootstrap</jar.mainclass>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
<configuration>
|
||||
<source>${jdk.version}</source>
|
||||
<target>${jdk.version}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- It's uber jar! -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>2.4.3</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<filters>
|
||||
<filter>
|
||||
<artifact>*:*</artifact>
|
||||
<excludes>
|
||||
<exclude>META-INF/*.SF</exclude>
|
||||
<exclude>META-INF/*.DSA</exclude>
|
||||
<exclude>META-INF/*.RSA</exclude>
|
||||
</excludes>
|
||||
</filter>
|
||||
</filters>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<!-- It's executable jar! -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>${jar.mainclass}</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<defaultGoal>clean compile package</defaultGoal>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<!-- Logging -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>1.7.21</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>1.1.7</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Lombok -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.16.10</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Telegram Bot base -->
|
||||
<dependency>
|
||||
<groupId>com.github.rubenlagus</groupId>
|
||||
<artifactId>TelegramBots</artifactId>
|
||||
<version>v2.3.5</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
22
src/main/java/eu/mikroskeem/bot/maerahn/Bootstrap.java
Normal file
22
src/main/java/eu/mikroskeem/bot/maerahn/Bootstrap.java
Normal file
@ -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();
|
||||
}
|
||||
}
|
42
src/main/java/eu/mikroskeem/bot/maerahn/Bot.java
Normal file
42
src/main/java/eu/mikroskeem/bot/maerahn/Bot.java
Normal file
@ -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");
|
||||
}
|
||||
}
|
76
src/main/java/eu/mikroskeem/bot/maerahn/Utils.java
Normal file
76
src/main/java/eu/mikroskeem/bot/maerahn/Utils.java
Normal file
@ -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 = "<failed to fetch>";
|
||||
}
|
||||
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)";
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user