├── .gitignore
├── FortuneWheel
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── example
│ │ └── telegrambot
│ │ └── App.java
│ └── resources
│ └── log4j2.xml
├── README.md
├── base.iml
├── base
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── example
│ │ └── telegrambot
│ │ ├── ability
│ │ └── Stickers.java
│ │ ├── bot
│ │ └── Bot.java
│ │ ├── command
│ │ ├── Command.java
│ │ ├── CommandElement.java
│ │ └── impl
│ │ │ └── CommandProvider.java
│ │ ├── handler
│ │ ├── AbstractHandler.java
│ │ ├── DefaultHandler.java
│ │ ├── EmojiHandler.java
│ │ ├── HandlerService.java
│ │ ├── SystemHandler.java
│ │ └── impl
│ │ │ └── HandlerImpl.java
│ │ ├── parser
│ │ ├── AnalyzeResult.java
│ │ ├── MessageType.java
│ │ ├── ParsedCommand.java
│ │ ├── Parser.java
│ │ ├── ParserService.java
│ │ └── impl
│ │ │ └── ParserImpl.java
│ │ └── service
│ │ ├── Constructed.java
│ │ ├── MessageReceiver.java
│ │ ├── MessageSender.java
│ │ ├── MsgService.java
│ │ └── QueueProvider.java
│ └── test
│ └── java
│ └── com
│ └── example
│ └── telegrambot
│ ├── AppTest.java
│ ├── UpdateMock.java
│ ├── command
│ ├── CommandMock.java
│ └── impl
│ │ └── CommandProviderTest.java
│ ├── handler
│ └── impl
│ │ └── HandlerImplTest.java
│ ├── parser
│ ├── ParserTest.java
│ └── impl
│ │ └── ParserImplTest.java
│ └── service
│ ├── MsgServiceTest.java
│ └── MsgServiceUpdateTest.java
├── pom.xml
└── sample-bot
├── pom.xml
└── src
└── main
├── java
└── com
│ └── example
│ └── telegrambot
│ ├── App.java
│ ├── StartCommand.java
│ └── StartHandler.java
└── resources
└── log4j2.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | # exclude binary files
2 | # extensions that come with pre-compiled /WEB-INF/classes directory will have local overrides
3 | *.class
4 | target/
5 | classes/
6 |
7 | #Idea
8 | .idea/
9 | *.iml
10 |
11 | # Log file
12 | *.log
13 |
14 | # BlueJ files
15 | *.ctxt
16 |
17 | # Mobile Tools for Java (J2ME)
18 | .mtj.tmp/
19 |
20 | # Package Files #
21 | *.jar
22 | *.war
23 | *.nar
24 | *.ear
25 | *.zip
26 | *.tar.gz
27 | *.rar
28 |
29 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
30 | hs_err_pid*
31 |
--------------------------------------------------------------------------------
/FortuneWheel/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 | telegramBotBase
9 | com.example.telegrambot
10 | 1.0-SNAPSHOT
11 |
12 |
13 | com.example.telegrambot
14 | FortuneWheel
15 | 1.0
16 | jar
17 | Fortune-wheel
18 |
19 |
20 | 8
21 | 8
22 |
23 |
24 |
25 |
26 | com.example.telegrambot
27 | base
28 | 1.0
29 | compile
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/FortuneWheel/src/main/java/com/example/telegrambot/App.java:
--------------------------------------------------------------------------------
1 | package com.example.telegrambot;
2 |
3 | import com.example.telegrambot.bot.Bot;
4 | import com.example.telegrambot.parser.Parser;
5 | import com.example.telegrambot.service.MessageReceiver;
6 | import com.example.telegrambot.service.MessageSender;
7 | import com.example.telegrambot.service.MsgService;
8 | import com.example.telegrambot.service.QueueProvider;
9 | import org.apache.logging.log4j.LogManager;
10 | import org.apache.logging.log4j.Logger;
11 | import org.telegram.telegrambots.ApiContextInitializer;
12 | import org.telegram.telegrambots.api.methods.send.SendMessage;
13 | import org.telegram.telegrambots.generics.BotSession;
14 |
15 | public class App {
16 | private static final Logger log = LogManager.getLogger(App.class);
17 | private static final int PRIORITY_FOR_SENDER = 1;
18 | private static final int PRIORITY_FOR_RECEIVER = 3;
19 | private static final String BOT_ADMIN = "321644283";
20 |
21 | public static void main(String[] args) {
22 | ApiContextInitializer.init();
23 | String botName = System.getenv("test_bot_name");
24 | String botToken = System.getenv("test_bot_token");
25 |
26 | MsgService msgService = new MsgService();
27 | QueueProvider queueProvider = new QueueProvider();
28 | msgService.setQueueProvider(queueProvider);
29 | Parser parser = new Parser(botName);
30 |
31 | Bot test_habr_bot = new Bot(botName, botToken);
32 | test_habr_bot.setMsgService(msgService);
33 |
34 | MessageReceiver messageReceiver = new MessageReceiver(test_habr_bot, queueProvider);
35 | MessageSender messageSender = new MessageSender(test_habr_bot, queueProvider.getSendQueue());
36 |
37 | BotSession connect = test_habr_bot.connect();
38 | log.info("StartBotSession. Bot started. " + connect.toString());
39 |
40 | Thread receiver = new Thread(messageReceiver);
41 | receiver.setDaemon(true);
42 | receiver.setName("MsgReciever");
43 | receiver.setPriority(PRIORITY_FOR_RECEIVER);
44 | receiver.start();
45 |
46 | Thread sender = new Thread(messageSender);
47 | sender.setDaemon(true);
48 | sender.setName("MsgSender");
49 | sender.setPriority(PRIORITY_FOR_SENDER);
50 | sender.start();
51 |
52 | sendStartReport(test_habr_bot);
53 | }
54 |
55 | private static void sendStartReport(Bot bot) {
56 | SendMessage sendMessage = new SendMessage();
57 | sendMessage.setChatId(BOT_ADMIN);
58 | sendMessage.setText("Запустился");
59 | bot.sendQueue.add(sendMessage);
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/FortuneWheel/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TelegramBotBase
2 |
3 | Base for working Telegram Bot
4 |
5 | ## App.java
6 | Starts the bot on the specified parameters "bot name" and "token"
7 |
8 | ## Class Bot.java
9 | - Override basic methods of TelegramLongPollingBot.
10 | - implement command botConnect. Register selected bot in TelegramAPI
11 | - When receiving update only logged the event is not taking any action.
12 |
13 | ##Part2
14 |
15 | ### Handlers and Command
16 | - add special class for Command
17 | - add Parser for Command
18 | - add Handlers for Command
19 |
20 | ### Threads
21 | - Sender Thread
22 | - Receiver Thread
23 | - Sample of the operate command in a separate thread. Notify command and class
--------------------------------------------------------------------------------
/base.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/base/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | com.example.telegrambot
8 | telegramBotBase
9 | 1.0-SNAPSHOT
10 |
11 | com.example.telegrambot
12 | base
13 | 1.0
14 | jar
15 | base
16 |
17 |
18 |
19 | UTF-8
20 |
21 |
22 |
23 |
24 |
25 | org.openjfx
26 | javafx-controls
27 | 17.0.1
28 |
29 |
30 |
31 | com.vdurmont
32 | emoji-java
33 | ${com.vdurmont.emoji-java.version}
34 |
35 |
36 |
37 | org.telegram
38 | telegrambots
39 | ${org.telegram.telegrambots.version}
40 |
41 |
42 |
43 |
44 | org.projectlombok
45 | lombok
46 | ${org.projectlombok.lombok.version}
47 | provided
48 |
49 |
50 |
51 |
52 | org.apache.logging.log4j
53 | log4j-api
54 | ${org.apache.logging.log4j.version}
55 |
56 |
57 |
58 | org.apache.logging.log4j
59 | log4j-core
60 | ${org.apache.logging.log4j.version}
61 |
62 |
63 |
64 | org.mockito
65 | mockito-core
66 | ${org.mockito.version}
67 |
68 |
69 |
70 | junit
71 | junit
72 | ${junit.version}
73 | test
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/base/src/main/java/com/example/telegrambot/ability/Stickers.java:
--------------------------------------------------------------------------------
1 | package com.example.telegrambot.ability;
2 |
3 | import org.telegram.telegrambots.api.methods.send.SendSticker;
4 |
5 | public enum Stickers {
6 | FUNNY_JIM_CARREY("CAADBQADiQMAAukKyAPZH7wCI2BwFxYE"),
7 | ;
8 |
9 | String stickerId;
10 |
11 | Stickers(String stickerId) {
12 | this.stickerId = stickerId;
13 | }
14 |
15 | public SendSticker getSendSticker(String chatId) {
16 | if ("".equals(chatId)) throw new IllegalArgumentException("ChatId cant be null");
17 | SendSticker sendSticker = getSendSticker();
18 | sendSticker.setChatId(chatId);
19 | return sendSticker;
20 | }
21 |
22 | public SendSticker getSendSticker() {
23 | SendSticker sendSticker = new SendSticker();
24 | sendSticker.setSticker(stickerId);
25 | return sendSticker;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/base/src/main/java/com/example/telegrambot/bot/Bot.java:
--------------------------------------------------------------------------------
1 | package com.example.telegrambot.bot;
2 |
3 | import com.example.telegrambot.service.Constructed;
4 | import com.example.telegrambot.service.MsgService;
5 | import com.google.common.base.Strings;
6 | import lombok.NoArgsConstructor;
7 | import lombok.Setter;
8 | import org.apache.logging.log4j.LogManager;
9 | import org.apache.logging.log4j.Logger;
10 | import org.telegram.telegrambots.TelegramBotsApi;
11 | import org.telegram.telegrambots.api.objects.Update;
12 | import org.telegram.telegrambots.bots.TelegramLongPollingBot;
13 | import org.telegram.telegrambots.exceptions.TelegramApiRequestException;
14 | import org.telegram.telegrambots.generics.BotSession;
15 |
16 | import java.util.concurrent.BlockingQueue;
17 | import java.util.concurrent.LinkedBlockingQueue;
18 |
19 | @NoArgsConstructor
20 | public class Bot extends TelegramLongPollingBot implements Constructed {
21 | private static final Logger log = LogManager.getLogger(Bot.class);
22 | private final int RECONNECT_PAUSE = 10000;
23 | @Setter
24 | MsgService msgService;
25 | @Setter
26 | private String botName;
27 |
28 | @Setter
29 | private String botToken;
30 |
31 | @Override
32 | public final boolean isConstructed() {
33 | return !Strings.isNullOrEmpty(botName) &&
34 | !Strings.isNullOrEmpty(botToken) &&
35 | msgService != null;
36 | }
37 |
38 | public final BlockingQueue