Запланировать отправку сообщения бота Telegram? - PullRequest
0 голосов
/ 03 августа 2020

Я не могу просто сделать это

public static void myBot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs msg)
{
    if (DateTime.Now.Hour == 01)
    {
        myBot.SendTextMessageAsync(msg.Message.Chat.Id, "Good Night");
    }
}

Потому что это требует, чтобы пользователь сначала отправил сообщение в это точное время, чтобы он получил сообщение. Как я могу сделать так, чтобы он автоматически отправлял сообщение с указанием c любому, кто когда-либо его запускал, без необходимости отправлять сообщение с точным временем, когда он отправит автоматическое c сообщение?

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Если вы разрабатываете с использованием ядра. net, вы можете использовать IHostedService для реализации фоновой задачи. Также существуют библиотеки для запланированных задач. Рекомендую Hangfire . Это бесплатно и просто в использовании. Вы можете добавить такую ​​задачу:

var nextDay = DateTime.Now.AddDays(1);
var sendDate = new DateTime(nextDay.Year, nextDay.Month, nextDay.Day, 1,0,0);
var jobId = BackgroundJob.Schedule(
   () => myBot.SendTextMessageAsync(msg.Message.Chat.Id, "Good Night");
   (sendDate - DateTime.Now));

Вам нужна база данных для использования Hangfire.

0 голосов
/ 03 августа 2020

Вы должны запланировать задачу, используя предоставленный интерфейс Windows. Кроме того, вы должны хранить идентификаторы пользователей в базе данных и перебирать их каждый раз, когда запускается запланированная задача.

Подробнее о планировании задач можно узнать в C# здесь Создание запланированных задач

...