Telegram bot .net с использованием webhook постоянно шлет update

153
26 января 2020, 11:10

Начал писать Телеграм-бот с использованием webhook и столкнулся с проблемой - при вводе тестовой команды, Telegram постоянно шлет update, даже если не ввожу команды: https://prnt.sc/nb64h3

почему так происходит?

Вот код:

 public class MessageController : ApiController
{
    [Route(@"api/message/update")] 
    public async Task<OkResult> Update([FromBody] Update update)
    {
        if (update != null)
        {
            var commands = Bot.Commands;
            var message = update.Message;
            var client = await Bot.Get();
            if (message?.Type == MessageType.Text)
            {
                foreach (var command in commands)
                {
                    if (command.Contains(message.Text))
                    {
                        command.Execute(message, client);
                        break;
                    }
                }
            }
        }
        return Ok();
    }
}
public abstract class Command
{
    private static Logger logger = LogManager.GetCurrentClassLogger();
    protected abstract string Name { get; }
    public abstract void Execute(Message message, TelegramBotClient client);
    public bool Contains(string command)
    {
        logger.Trace($"Command: {command}");
        return command.Contains(this.Name) && command.Contains(AppSettings.Name);
    }
}
public static class Bot
{
    private static TelegramBotClient client;
    private static List<Command> commandsList;
    public static IReadOnlyList<Command> Commands => commandsList.AsReadOnly();
    public static async Task<TelegramBotClient> Get()
    {
        if (client != null)
        {
            return client;
        }
        commandsList = new List<Command>();
        commandsList.Add(new HelloCommand());
        //TODO: Add new commands
        client = new TelegramBotClient(AppSettings.Key);
        var hook = string.Format(AppSettings.Url, "api/message/update");
        await client.SetWebhookAsync(hook);
        return client;
    }
}
public class HelloCommand : Command
{
    private static Logger logger = LogManager.GetCurrentClassLogger();
    protected override string Name => "hello_booking";
    public override async void Execute(Message message, TelegramBotClient client)
    {
        try
        {
            var chatId = message.Chat.Id;
            var messageId = message.MessageId;

            //TODO: BOT LOGIC

            await client.SendTextMessageAsync(chatId, "HELLO!", replyToMessageId: messageId);
        }
        catch (Exception e)
        {
            logger.Error(e, $"HelloCommand: {e.Message}");
            throw;
        }
    }
READ ALSO
Десериализация JSON с массивами в C#

Десериализация JSON с массивами в C#

JSON файл содержит поле и три массиваПервые 2 массива описывают данные, последний массив содержит массивы с данными, каждый массив это один...

153
Как создать аналог event listener на php?

Как создать аналог event listener на php?

Нужен метод который будет отслеживать изменения в свойствах другого классаПодскажите, пожалуйста, как можно это реализовать или где об этом...

141
Регулярные выражения php preg_match

Регулярные выражения php preg_match

Пытаюсь достать из переменной $result_text ГОСТы, когда в переменной храню короткую строку в которую включён какой нибудь ГОСТ, preg_match_all находитИ...

192