Пример #1
0
 private async Task ProcessCommand(Message message, string input)
 {
     using (var context = new CallbackQueryContext(configuration, botClient, message, input))
     {
         if (!commandHandlers.TryGetValue(context.Command, out var handler))
         {
             return;
         }
         try
         {
             await handler(context);
         }
         catch (IncompleteDataException)
         {
         }
         catch (AuthenticationRequiredException)
         {
             try
             {
                 await context.Interaction.Write("Please authenticate using '/apikey [API Key]' first.");
             }
             catch (Exception)
             {
                 // Don't worry, be happy
             }
         }
         catch (Exception ex)
         {
             log($"[{nameof(ProcessCommand)}] Unhandled exception: {ex}");
         }
     }
 }
Пример #2
0
        private async Task ProcessMessage(Message message)
        {
            if (message?.Type != MessageType.Text)
            {
                return;
            }

            var words = message.Text.Split(' ');
            var fw    = words[0];

            var args = words.Skip(1);

            if (fw[0] != '/')
            {
                return;
            }
            var verb = fw.Substring(1);

            switch (verb)
            {
            case "start":
                var me = await botClient.GetMeAsync();

                var reply = $"Hello I'm *{me.FirstName}*. Please setup your API Key by typing '/apikey [key]'.";
                await botClient.SendTextMessageAsync(message.Chat.Id, reply, ParseMode.Markdown);

                break;

            case "apikey":
                var key = args.First();

                using (var context = new CallbackQueryContext(configuration, botClient,
                                                              await botClient.SendTextMessageAsync(message.Chat.Id, "Trying to authenticate ..."), ""))
                {
                    try
                    {
                        var api = await context.GetApi(key);

                        var details = await api.MyDetails();

                        var user = await context.Db.Users.Where(u => u.ChatId == message.Chat.Id)
                                   .SingleOrDefaultAsync() ?? context.Db.Users.Add(new User()).Entity;

                        user.ApiKey = key;
                        user.ChatId = message.Chat.Id;
                        user.SupportManagerUserId = details.Id;

                        await context.Db.SaveChangesAsync();

                        await context.Interaction.Write($"Authenticated as *{details.DisplayName}*");
                    }
                    catch (Exception)
                    {
                        await botClient.SendTextMessageAsync(message.Chat.Id, "Failed to authenticate.");
                    }
                }
                break;

            default:
                if (commandHandlers.ContainsKey(verb))
                {
                    await ProcessCommand(
                        await botClient.SendTextMessageAsync(message.Chat.Id, "Preparing response..."), verb);
                }
                break;
            }
        }