Как заставить моего бота отправлять сообщения без обновления? - PullRequest
0 голосов
/ 01 января 2019

Я создаю бот-телеграмму в Java-боте, но у меня проблема, я видел ботов, которые отправляют текст \ объявление без обновления от пользователя, я хочу знать, как я могу это сделать. Это только отправка сообщений, когдаПользователь отправляет сообщение в него. Мне нужно знать, как заставить моего бота отправлять некоторые сообщения без onUpdateReceived. (извините за мой английский)

onUpdateReceived (Обновление обновления) отправляет сообщение только тогда, когда пользователь отправляет команду

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

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 , который предоставляет это решение.

0 голосов
/ 01 января 2019

Просто создайте экземпляр сообщения Send.Например,

SendMessage message = new SendMessage (chatid,text)

А затем просто позвольте выполнить инстанс с вашим ботом.

SendMessage message = new SendMessage (chatid,text)
bot.execute(message)

Очевидно, что лагерь chatid должен быть жестко закодирован.

...