Как вывести меню в Telegram Bot сразу при старте?
Можно ли вывести меню в Telegram Bot, без ввода команды /start и чтобы оно всегда там висело?
Просто много пользователей не знают, что нужно вводить команду /start.
Нашел как создаются объекты меню:
public interface ICommandService
{
List<TelegramCommand> Get();
}
public abstract class TelegramCommand
{
public abstract string Name { get; }
public abstract Task Execute(Message message, ITelegramBotClient client);
public abstract bool Contains(Message message);
}
public class StartCommand : TelegramCommand
{
public override string Name => @"/start";
public override bool Contains(Message message)
{
if (message.Type != MessageType.Text)
return false;
return message.Text.Contains(Name);
}
public override async Task Execute(Message message, ITelegramBotClient botClient)
{
var keyBoard = new ReplyKeyboardMarkup
{
Keyboard = new[]
{
new[]
{
new KeyboardButton("\U0001F3E0 Главная")
},
new[]
{
new KeyboardButton("\U0001F451 Получить QR-код")
},
new []
{
new KeyboardButton("\U0001F45C Зарегистрироваться")
},
new []
{
new KeyboardButton("\U0001F4D6 Помощь")
}
}
};
await botClient.SendTextMessageAsync(message.Chat.Id, "Здравствуйте!", parseMode: ParseMode.Html, replyMarkup: keyBoard);
}
}
Обработчик сообщений от бота:
[HttpPost]
public async Task<IActionResult> Post([FromBody] Update update)
{
if (update == null) return Ok();
var message = update.Message;
foreach (var command in _commandService.Get())
{
if (command.Contains(message))
{
await command.Execute(message, _telegramBotClient);
break;
}
}
string responseMessage = "";
if (message != null)
{
responseMessage = "Укажите номер в федеральном формате (+7хххххххххх)";
// Ответ в чат-бот
//await telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseData.TextMessage, replyToMessageId: message.MessageId);
if (message.ReplyToMessage != null)
{
string messageNumberPhone;
switch (message.ReplyToMessage.Text)
{
case "Укажите номер в федеральном формате (+7хххххххххх)":
messageNumberPhone = ServicePhoneNumber.LeaveOnlyNumbers(message.Text);
if (messageNumberPhone.Length < 11 || messageNumberPhone.Length > 12)
{
await _telegramBotClient.SendTextMessageAsync(message.From.Id, "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)", ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
}
else
{
string responseMessageFromDB = "Спасибо!";
await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
}
break;
case "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)":
messageNumberPhone = ServicePhoneNumber.LeaveOnlyNumbers(message.Text);
if (messageNumberPhone.Length < 11 || messageNumberPhone.Length > 12)
{
await _telegramBotClient.SendTextMessageAsync(message.From.Id, "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)", ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
}
else
{
string responseMessageFromDB = "Спасибо!";
await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
}
break;
}
}
else
{
//await _telegramBotClient.SendTextMessageAsync(message.From.Id, responseMessage, ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
}
}
return Ok();
}