0
votes

Comment faire en sorte que mon bot envoie un message sans mise à jour?

Je crée un robot de télégramme dans un bot java mais j'ai un problème, j'ai vu des robots qui envoient du texte \ annonce sans mise à jour d'un utilisateur, je veux savoir comment je peux le faire. Il n'envoie des messages que lorsque le l'utilisateur lui envoie un message.J'ai besoin de savoir comment puis-je faire en sorte que mon bot envoie un message sans onUpdateReceived. (désolé pour mon anglais)

onUpdateReceived (mise à jour de mise à jour) n'envoie un message que lorsque l'utilisateur envoie une commande

Merci.


0 commentaires

3 Réponses :


0
votes

Créez simplement une instance d'envoi de message. Par exemple,

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

Et puis laissez simplement exécuter l'instance avec votre bot.

SendMessage message = new SendMessage (chatid,text)

De toute évidence, le camp chatid doit être codé en dur. P >


0 commentaires

0
votes

onUpdateReceived (Update) est juste une méthode appelée lorsque votre bot obtient une mise à jour, mais ce n'est pas le seul endroit où votre bot peut appeler execute (SendMessage) . Ce dont vous avez besoin est d'écrire une méthode dans votre bot comme

public class SendNotification implements Job {
    public void execute(JobExecutionContext jobExecutionContext) {
        schedulerContext = jobExecutionContext.getScheduler().getContext();
        YourBot bot = (YourBot) schedulerContext.get("bot");
        bot.sendNotification();
    }
}

évidemment puisque vous n'avez pas d'objet expéditeur User , vous devez trouver un critère à qui envoie le message ( peut-être voulez-vous stocker les identifiants des utilisateurs auxquels vous souhaitez envoyer un ping dans une base de données).

Le problème est maintenant: comment déclencher cette méthode? La réponse est: comme vous le souhaitez.

Une façon pourrait être de planifier des tâches cron pour exécuter périodiquement sendAds () . Pour ce faire, vous pouvez le définir dans la méthode main , juste après avoir enregistré votre bot. En utilisant Quartz lib, vous pouvez écrire quelque chose comme

    /* 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 est une implémentation de l'interface Job qui appelle en fait la méthode du bot, comme

public void sendAds() {
    for (Integer chatId: usersYouWantToPing) {
        SendMessage ad = new SendMessage
            .setChatId(chatId)
            .setText(text);
        execute(ad);
    }
}

Pour plus de détails Je vous suggère de vérifier mon modèle de robot de télégramme qui fournit cette solution.


0 commentaires

0
votes

Cette méthode délicate a fonctionné pour moi.

Le bot Telegram doit connaître le chatID de ce groupe ou chat personnel avec lequel le bot parle.

Vous devez d'abord obtenir chatId qui est Long

Créez la commande / chatid avec l'aide de BotFather dans le télégramme.

Et utilisez cette commande en java comme ceci:

 public class Main {
        public static void main(String[] args) {
            ApiContextInitializer.init();
            TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
            try {
                telegramBotsApi.registerBot(new TelegramBot());
                TelegramBot bot = new TelegramBot();
                bot.sayImNotRobot(); //now, you can call this method whenever you want
 
  
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Dans la classe principale, utilisez cette méthode pour imprimer chatId dans la console et copiez-collez-le (à partir du résultat de la console) dans chatIdLike123456 que j'ai écrit dans la classe TelegramBot.

public class TelegramBot extends TelegramLongPollingBot {
    public Long chatId = null;

    public void onUpdateReceived(Update update) {

        String input = update.getMessage().getText();
        SendMessage output = new SendMessage();

        if (input.equals("/chatid")) {
            chatId = update.getMessage().getChatId();
            System.out.println("chatId = " + chatId);
            output.setText("chatid is  = " + chatId);
        }

        output.setChatId(update.getMessage().getChatId());
        try {
            execute(output);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }

    }

    public void sayImNotRobot() {
    SendMessage message = new SendMessage();

    message.enableMarkdown(true);
    message.setChatId((long) chatIdLike123456); //Write chatID manually here
    message.setText("Im not robot");
    try {
        execute(message);
    } catch (TelegramApiException e) {
        e.printStackTrace();
    }

}
    
    public String getBotUsername() {
        return "your bot name here";
    }

    public String getBotToken() {
        return "your bot token here";
    }
}


0 commentaires