public static ValidationResult <InlineQueryResultVoice> CreateValidation(this InlineQueryResultVoice value) => new ValidationResult <InlineQueryResultVoice>(value).ValidateRequired(x => x.Type) .ValidateRequired(x => x.Id) .ValidateRequired(x => x.VoiceUrl) .ValidateRequired(x => x.Title);
public GoogleSpeechUkrBot(string TelegramApiToken, string ConnectionString) { var userSettings = new UserSettings(ConnectionString); bot = new TelegramBotClient(TelegramApiToken); bot.SetWebhookAsync(""); bot.OnInlineQuery += async(object updobj, InlineQueryEventArgs iqea) => { try { if (string.IsNullOrEmpty(iqea.InlineQuery.Query) || string.IsNullOrWhiteSpace(iqea.InlineQuery.Query)) { return; } var url = new GoogleTTS.gTTS(iqea.InlineQuery.Query, URLonly: true).URL; if (!string.IsNullOrEmpty(url)) { var inline = new InlineQueryResultVoice[] { new InlineQueryResultVoice("0", url, iqea.InlineQuery.Query) }; await bot.AnswerInlineQueryAsync(iqea.InlineQuery.Id, inline); } } catch (Exception ex) { return; } }; bot.OnMessage += async(object updobj, MessageEventArgs mea) => { var message = mea.Message; if (message.Type == MessageType.Voice && userSettings.GetVoice(message.Chat.Id)) { try { var gSTT = new GoogleSTT.gSTT($"https://api.telegram.org/file/bot{TelegramApiToken}/{bot.GetFileAsync(message.Voice.FileId).Result.FilePath}"); await bot.SendTextMessageAsync(message.Chat.Id, gSTT.Result, replyToMessageId : message.MessageId); } catch (Exception ex) { await bot.SendTextMessageAsync(message.Chat.Id, $"Не вдалося розпізнати повідомлення. Помилка: {ex.Message}", replyToMessageId : message.MessageId); } } else if (mea.Message.Type == MessageType.Text) { if (message.Text == null) { return; } var ChatId = message.Chat.Id; var command = message.Text.ToLower().Replace("@googlespeechukrbot", "").Replace("/", ""); switch (command) { case "start": await bot.SendTextMessageAsync(ChatId, "Вітаю! Я @GoogleSpeechUkrBot!\nНадішліть мені текстове повідомлення, щоб синтезувати голосове повідомлення, або надішліть голосове повідомлення, щоб розпізнати мовлення.\nНатисніть '/', щоби обрати команду."); break; case "sendvoice": await bot.SendTextMessageAsync(ChatId, "Оберіть чат, до якого хочете надіслати голосове повідомлення.", replyMarkup : new InlineKeyboardMarkup(new[] { InlineKeyboardButton.WithSwitchInlineQuery("Надіслати") })); break; case "voiceon": userSettings.ManageVoice(ChatId, true); await bot.SendTextMessageAsync(message.Chat.Id, "Увімкнено розпізнавання мовлення у цьому чаті.", replyToMessageId : message.MessageId); break; case "voiceoff": userSettings.ManageVoice(ChatId, false); await bot.SendTextMessageAsync(message.Chat.Id, "Вимкнено розпізнавання мовлення у цьому чаті.", replyToMessageId : message.MessageId); break; case "texton": userSettings.ManageText(ChatId, true); await bot.SendTextMessageAsync(message.Chat.Id, "Увімкнено синтез мовлення у цьому чаті.", replyToMessageId : message.MessageId); break; case "textoff": userSettings.ManageText(ChatId, false); await bot.SendTextMessageAsync(message.Chat.Id, "Вимкнено синтез мовлення у цьому чаті.", replyToMessageId : message.MessageId); break; default: if (userSettings.GetText(message.Chat.Id)) { try { await bot.SendVoiceAsync(ChatId, new InputFileStream(new MemoryStream(new GoogleTTS.gTTS(command).ToByteArray())).Content, replyToMessageId : message.MessageId); } catch { await bot.SendTextMessageAsync(message.Chat.Id, "Під час синтезу мовлення виникла помилка.", replyToMessageId : message.MessageId); } } break; } } }; }