大家好!在学习的某个阶段,您希望从解决问题转向创建真正的项目,这些项目将构成您的投资组合的基础。当我开始实习时(我强烈推荐给大家),我收到了一份以自由职业者身份编写电报机器人的邀请。由于我的知识有限,我编写了一个相当简单的机器人(迁移到 Spring 之前的最后一次提交),其中包含三个线程:
和 Telegram API:TelegramBots-Spring-Boot-Starter 库包括 Spring Boot 和 Telegram API。使用它允许我们以相当简单的方式在代码中声明机器人,Spring 本身将创建 Bean 并激活机器人。如果您对此时发生的事情感兴趣,请查看库源代码(在开发环境中或在Github上)。我们还添加了编译参数: 填写 pom 后不要忘记更新所有依赖项! 让我们创建两个类 - App 和 Bot,以及资源文件夹中的 application.yaml 文件。我的项目的结构如下所示:在这个阶段,让我们将机器人的凭据添加到 application.yaml 中:
- 消息接收线程;
- 消息发送线程;
- 事件调度线程(它检查调度消息并更新 JSON 中的缓存数据)。
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
分层表示法使我们能够避免重复(bot.name、bot.token)并提高可读性。如果您还没有创建机器人,您可以按照官方说明创建一个。如果您不想在 application.yaml 中显示机器人的凭据(这是正确的),请在部署时使用环境变量:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
填写 Bot 类:
package com.whiskels.telegram.bot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
// Аннотация @Component необходима, чтобы наш класс распознавался Spring, How полноправный Bean
@Component
// Наследуемся от TelegramLongPollingBot - абстрактного класса Telegram API
public class Bot extends TelegramLongPollingBot {
// Аннотация @Value позволяет задавать meaning полю путем считывания из application.yaml
@Value("${bot.name}")
private String botUsername;
@Value("${bot.token}")
private String botToken;
/* Перегружаем метод интерфейса LongPollingBot
Теперь при получении messages наш бот будет отвечать сообщением Hi!
*/
@Override
public void onUpdateReceived(Update update) {
try {
execute(new SendMessage().setChatId(update.getMessage().getChatId())
.setText("Hi!"));
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
// Геттеры, которые необходимы для наследования от TelegramLongPollingBot
public String getBotUsername() {
return botUsername;
}
public String getBotToken() {
return botToken;
}
}
填写App类:
package com.whiskels.telegram;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.telegram.telegrambots.ApiContextInitializer;
// Аннотация, которая объединяет в себя @Configuration, @EnableAutoConfiguration, @ComponentScan
@SpringBootApplication
public class App {
public static void main(String[] args) {
// Здесь code написан по заветам
// https://github.com/rubenlagus/TelegramBots/tree/master/telegrambots-spring-boot-starter
ApiContextInitializer.init();
SpringApplication.run(App.class, args);
}
}
如果我们做的一切正确,那么我们就可以运行 main 并向我们的机器人打招呼。准备好!我们已经成功编写并启动了一个电报机器人,它可以向每条传入的消息打招呼。如果本文对您有用,那么最好的感谢是您查看我的存储库并留下一个星星。在那里您还可以找到我的电报机器人版本,它有许多有趣的功能:
- 将用户存储在 Postgres 数据库中;
- 根据用户角色授权访问命令;
- 使用自定义注释@BotCommand和@RequiredRoles来创建消息处理程序并检查用户权限;
- 支持创建通知计划。
GO TO FULL VERSION