onUpdateReceived(Update)
- это просто метод, вызываемый, когда ваш бот получает обновление, но это не единственное место, где ваш бот может вызвать execute(SendMessage)
.Вам нужно написать метод в вашем боте, такой как
public void sendAds() {
for (Integer chatId: usersYouWantToPing) {
SendMessage ad = new SendMessage
.setChatId(chatId)
.setText(text);
execute(ad);
}
}
, очевидно, поскольку у вас нет объекта User
отправителя, вам нужно найти критерии для того, кто отправляет сообщение (возможно, вы хотите сохранить идентификаторыпользователей, которых вы хотите пинговать в БД).
Вопрос теперь в том, как запустить этот метод?Ответ таков: как вы хотите.
Одним из способов может быть планирование некоторых заданий cron на периодическое выполнение sendAds()
.Для этого вы можете определить его в методе main
сразу после регистрации своего бота.Используя Quartz lib, вы можете написать что-то вроде
/* Instantiate the job that will call the bot function */
JobDetail jobSendAd = JobBuilder.newJob(SendAd.class)
.withIdentity("sendAd")
.build();
/* Define a trigger for the call */
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("everyMorningAt8")
.withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(8, 0))
.build();
/* Create a scheduler to manage triggers */
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.getContext().put("bot", bot);
scheduler.start();
scheduler.scheduleJob(jobSendAd, trigger);
, где SendAd
- это реализация интерфейса Job
, который фактически вызывает метод бота, например,
public class SendNotification implements Job {
public void execute(JobExecutionContext jobExecutionContext) {
schedulerContext = jobExecutionContext.getScheduler().getContext();
YourBot bot = (YourBot) schedulerContext.get("bot");
bot.sendNotification();
}
}
Для получения более подробной информации, я предлагаю вам проверить мой шаблон бота telegram , который предоставляет это решение.