Exemple #1
0
 public async Task <HandlerResult> HandleAsync(IIncomingMessage message, IVKBot bot)
 {
     return(new HandlerResult()
     {
         message = bot.confimationCode
     });
 }
 public bool CanHandle(IIncomingMessage message, IVKBot bot)
 {
     return(_messageTypes.Contains(message.MessageType.ToLowerInvariant()) &&
            string.IsNullOrWhiteSpace(message.payload) &&
            !string.IsNullOrWhiteSpace(message.text) &&
            message.text.Trim().ToLower() == "начать");
 }
        public async Task <string> getUserNameAsync(string userId, IVKBot bot)
        {
            var usersRequest = new VKBot.UsersRequest
            {
                user_ids  = userId,
                name_case = "nom",
                //fields =
            };
            var usersResponse = await bot.usersGetAsync(usersRequest);

            var users    = ((JArray)JObject.Parse(usersResponse)["response"]).FirstOrDefault();
            var userName = users["first_name"] + " " + users["last_name"];

            return(userName);
        }
        public async Task <string> getConversationIdAync(string conversationName, IVKBot bot)
        {
            var conversationRequest = new VKBot.ConversationRequest
            {
                offset = 0,
                count  = 100,
                filter = "all"
            };
            var conversationResponse = await bot.messagesGetConversationsAsync(conversationRequest);

            var conversation = ((JArray)JObject.Parse(conversationResponse)["response"]["items"])
                               .Where(t => t["conversation"]["chat_settings"] != null && (string)t["conversation"]["chat_settings"]["title"] == conversationName).FirstOrDefault();

            string converstionId = (string)conversation["conversation"]["peer"]["id"];

            return(converstionId);
        }
        public async Task HandleAsync(IIncomingMessage message, IVKBot bot)
        {
            string nodeId = "0";
            string linkId = "0";

            var nextNode = _flow.getNextNode(nodeId, linkId);

            var keyboard = Services.FlowService.convertToKeyboard(nextNode, null);


            var outgoingMessage = new OutgoingMessage()
            {
                peer_id  = message.peer_id,
                message  = "> " + nextNode.label,
                keyboard = keyboard.ToString()
            };
            await bot.sendMessageAsync(outgoingMessage);
        }
        async Task <IActionResult> ProcessMessagesAsync(IVKBot bot, string messageBody)
        {
            try
            {
                var message = Newtonsoft.Json.JsonConvert.DeserializeObject <UpdateMessage>(messageBody);
                //check chache
                //if cache already contains the message, then return ok result, else proceed
                ObjectCache cache    = MemoryCache.Default;
                var         cacheKey = message.peer_id + message.MessageType + message.from_id + message.date + (message.payload != null ? message.text : "");
                if (cache[cacheKey] != null)
                {
                    _logger.Log(NLog.LogLevel.Info, $"cache key found: {cacheKey}");
                    return(Ok("ok"));
                }
                cache.Add(cacheKey, message, DateTime.Now.AddMinutes(5));

                //handle logic with response to vk
                foreach (var handler in _responseHandlers)
                {
                    if (handler.CanHandle(message, bot))
                    {
                        var result = await handler.HandleAsync(message, bot);

                        return(Ok(result.message));
                    }
                }

                //handle bot requests
                foreach (var handler in _updatesHandlers)
                {
                    if (handler.CanHandle(message, bot))
                    {
                        handler.HandleAsync(message, bot);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Log(NLog.LogLevel.Error, ex, "Error during bot process");
                //return Ok(ex.ToString());
                return(Ok("ok"));
            }
            return(Ok("ok"));
        }
        public async Task HandleAsync(IIncomingMessage message, IVKBot bot)
        {
            JObject payload = JObject.Parse(message.payload);

            string nodeId = payload["command"] != null ? "0" : (string)payload["node"];
            string linkId = payload["command"] != null ? "0" : (string)payload["link"];
            //string address = payload["command"] != null ? "0" : (string)payload["address"];
            string conversationId = payload["command"] != null ? "0" : (string)payload["conversationId"];

            var nextNode = _flow.getNextNode(nodeId, linkId);

            var    currentLink = _flow.getCurrentLink(nodeId, linkId);
            string userName    = await getUserNameAsync(message.from_id, bot);

            if (currentLink.type != null && currentLink.type == "address")
            {
                conversationId = await getConversationIdAync(message.text, bot);
            }

            if (conversationId != null)
            {
                var conversationMessage = new OutgoingMessage()
                {
                    peer_id = conversationId,
                    message = userName + ": " + message.text
                };

                await bot.sendMessageAsync(conversationMessage);
            }

            var keyboard = Services.FlowService.convertToKeyboard(nextNode, conversationId);

            var outgoingMessage = new OutgoingMessage()
            {
                peer_id  = message.peer_id,
                message  = "> " + nextNode.label,
                keyboard = keyboard.ToString()
            };

            await bot.sendMessageAsync(outgoingMessage);
        }
 public async Task HandleAsync(IIncomingMessage message, IVKBot bot)
 {
 }
 public bool CanHandle(IIncomingMessage message, IVKBot bot)
 {
     return(message.attachments.Any(x => x.type == "photo"));
 }
Exemple #10
0
 public bool CanHandle(IIncomingMessage message, IVKBot bot)
 {
     return(message.MessageType == "confirmation");
 }
Exemple #11
0
 public VKBotController(IVKBot bot, List <IUpdatesHandler <IIncomingMessage> > updatesHandlers, List <IUpdatesResultHandler <IIncomingMessage> > responseHandlers)
 {
     _bot              = bot;
     _updatesHandlers  = updatesHandlers;
     _responseHandlers = responseHandlers;
 }