Example #1
0
        public void SendToSignalR(BotResponse botResponse)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(
                        queue: _rabbitMQSettings.BotResponseQueue.Name,
                        durable: _rabbitMQSettings.BotResponseQueue.Durable,
                        exclusive: _rabbitMQSettings.BotResponseQueue.Exclusive,
                        autoDelete: _rabbitMQSettings.BotResponseQueue.AutoDelete,
                        arguments: null);

                    var serializedBotResponse = JsonConvert.SerializeObject(botResponse);
                    var responseBody          = Encoding.UTF8.GetBytes(serializedBotResponse);

                    channel.BasicPublish(exchange: "",
                                         routingKey: _rabbitMQSettings.BotResponseQueue.Name,
                                         basicProperties: null,
                                         body: responseBody);

                    Console.WriteLine(" [x] Sent {0}", serializedBotResponse);
                }
        }
Example #2
0
        public BotResponse <string> Process(string requestBody)
        {
            var response = new BotResponse <string>
            {
                Ok          = false,
                Description = "Not implemented",
                ErrorCode   = -1,
                Parameters  = null,
                Result      = "Not implemented"
            };

            if (ExtractUpdate(requestBody))
            {
                response.Ok          = true;
                response.Description = "OK";
                response.Result      = response.Description;
                response.ErrorCode   = null;
            }
            else
            {
                response.Description = "Invalid JSON";
                response.Result      = response.Description;
                response.ErrorCode   = 1;
            }

            return(response);
        }
Example #3
0
        public Task SendAsync(Destination destination, BotResponse botResponse, SkypeSender skypeSender = null)
        {
            if (_isMocked)
            {
                Console.WriteLine($"{destination.Messenger.ToString()}, {destination.ChannelId}, {destination.UserId}: {botResponse.Text}");
                Console.WriteLine("-------------------------------------------------------");
                return(Task.CompletedTask);
            }

            switch (destination.Messenger)
            {
            case Messenger.Slack:
                return(_slackClient.PostMessageAsync(destination.ChannelId, botResponse.Text));

            case Messenger.Telegram:
                return(_telegramClient != null?_telegramClient.SendTextMessageAsync(destination.ChannelId, botResponse.Text) : Task.CompletedTask);

            case Messenger.Skype:
                if (skypeSender == null)
                {
                    // todo: log warning: skypeSender is null
                    return(Task.CompletedTask);
                }
                return(Task.Run(() => skypeSender.Write(destination.ChannelId, botResponse.Text)));

            default:
                // todo: log warning: unsupported messenger
                return(Task.CompletedTask);
            }
        }
Example #4
0
        private static void Write(Document doc, BotResponse response)
        {
            if (response == null)
            {
                return;
            }
            var sec = doc.Sections.Last;
            var par = (Paragraph)null;
            var tun = (Textrun)null;
            var hyp = (Hyperlink)null;

            par = sec.AddParagraph();
            tun = par.AddTextrun(RtfUtility.unicodeEncode("Chat Message"));
            tun.Style.FontSize  = 24F;
            tun.Style.TextColor = PrimaryColor;

            par = sec.AddParagraph(RtfUtility.unicodeEncode(response.Text));
            par.Style.Spacings.SpacingBefore = 5F;

            if (response.Rank == Syn.VA.ResponseRank.Low)
            {
                par.AddTextrun(" ");
                tun = par.AddTextrun(RtfUtility.unicodeEncode("Please CLICK HERE to search more info from Google."));
                tun = par.GetTextrun(response.Text.Length + 8, 10);
                hyp = tun.AddHyperlink(LinkType.WebPage, RtfUtility.unicodeEncode(LinkVariables.FindSearchAddress(LinkVariables.Google, response.From)));
                hyp.Textruns.Style.TextColor            = Color.Black;
                hyp.Textruns.Style.FontStyle.Bold       = true;
                hyp.Textruns.Style.FontStyle.Underlined = false;
            }
            sec.AddParagraph();
        }
        public async Task <DialogTurnResult> GetReturnTimeConfirmTicket(WaterfallStepContext sc, CancellationToken cancellationToken = default(CancellationToken))
        {
            var botResponse         = new BotResponse("I will book these tickets for you. Please confirm:", "I will book these tickets for you. Please confirm:");
            var replyToConversation = sc.Context.Activity.CreateReply(botResponse);

            //replyToConversation.AttachmentLayout = AttachmentLayoutTypes.Carousel;
            replyToConversation.Attachments = new List <Attachment>();
            var replyMessage1 = sc.Context.Activity.CreateAdaptiveCardReply(
                botResponse,
                "AdaptiveCard/TicketCard.json",
                new CardData(),
                null,
                new StringDictionary()
            {
                { "Location", "Beijing - Seattle" }, { "DepartTime", "1/8 12:15" }, { "ArriveTime", "1/8 6:30" }
            });
            var replyMessage2 = sc.Context.Activity.CreateAdaptiveCardReply(
                botResponse,
                "AdaptiveCard/TicketCard.json",
                new CardData(),
                null,
                new StringDictionary()
            {
                { "Location", "Seattle - Beijing" }, { "DepartTime", "1/13 7:30" }, { "ArriveTime", "1/14 14:45" }
            });

            replyToConversation.Attachments.Add(replyMessage1.Attachments[0]);
            replyToConversation.Attachments.Add(replyMessage2.Attachments[0]);
            return(await sc.PromptAsync(promptDialogId, new PromptOptions { Prompt = replyToConversation }, cancellationToken));
        }
Example #6
0
        /// <summary>
        /// Generate ToAdaptiveCardAttachmentWithoutSpeech.
        /// </summary>
        /// <param name="todos">To Do activities.</param>
        /// <param name="allTaskCount">all tasks count.</param>
        /// <param name="taskContent">the task content.</param>
        /// <param name="botResponse1">the bot response 1.</param>
        /// <param name="botResponse2">the bot response 2.</param>
        /// <returns>Generated adaptive card attachment.</returns>
        public static Microsoft.Bot.Schema.Attachment ToAdaptiveCardAttachmentForOtherFlows(
            List <ToDoTaskActivityModel> todos,
            int allTaskCount,
            string taskContent,
            BotResponse botResponse1,
            BotResponse botResponse2)
        {
            var toDoCard = new AdaptiveCard();
            var showText = Format(botResponse2.Reply.Text, new StringDictionary()
            {
                { "taskCount", allTaskCount.ToString() }
            });
            var speakText = Format(botResponse1.Reply.Speak, new StringDictionary()
            {
                { "taskContent", taskContent }
            })
                            + Format(botResponse2.Reply.Speak, new StringDictionary()
            {
                { "taskCount", allTaskCount.ToString() }
            });

            toDoCard.Speak = speakText;

            var body      = new List <AdaptiveElement>();
            var textBlock = new AdaptiveTextBlock
            {
                Text = showText,
            };

            body.Add(textBlock);
            var choiceSet = new AdaptiveChoiceSetInput();

            choiceSet.IsMultiSelect = true;
            string value = Guid.NewGuid().ToString() + ",";

            foreach (var todo in todos)
            {
                var choice = new AdaptiveChoice();
                choice.Title = todo.Topic;
                choice.Value = todo.Id;
                choiceSet.Choices.Add(choice);
                if (todo.IsCompleted)
                {
                    value += todo.Id + ",";
                }
            }

            value           = value.Remove(value.Length - 1);
            choiceSet.Value = value;
            body.Add(choiceSet);
            toDoCard.Body = body;

            var attachment = new Microsoft.Bot.Schema.Attachment()
            {
                ContentType = AdaptiveCard.ContentType,
                Content     = toDoCard,
            };

            return(attachment);
        }
        public async Task <IActionResult> AddBotResponse([FromBody] BotResponseDto resp)
        {
            if (resp == null)
            {
                return(BadRequest());
            }

            if (!HasAccess(_validationRepo.GetContextOwnerId(resp.PatternId)))
            {
                return(StatusCode(403));
            }

            var validationContext = new System.ComponentModel.DataAnnotations.ValidationContext(resp, null, null);
            var validationResults = new List <ValidationResult>();

            Validator.TryValidateObject(resp, validationContext, validationResults, true);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            BotResponse respObj = _mapper.Map <BotResponse>(resp);

            if (await _patternRepo.AddBotResponseToPatternAsync(respObj))
            {
                return(StatusCode(201));
            }
            else
            {
                return(BadRequest());
            };
        }
Example #8
0
        public override void OnUserChat(RoomInstance Instance, RoomActor Actor, string MessageText, bool Shout)
        {
            if (mSelfActor == null || Actor.Type == RoomActorType.AiBot || mServingItemId > 0 ||
                (Distance.Calculate(Actor.Position.GetVector2(), mSelfActor.Position.GetVector2()) > mSelfBot.ResponseDistance))
            {
                return;
            }

            BotResponse Response = mSelfBot.GetResponseForMessage(MessageText);

            if (Response != null)
            {
                mSelfActor.Chat(Response.GetResponse(), false);

                if (Response.ResponseServeId > 0)
                {
                    mMovingToServePos = true;
                    mServingItemId = Response.ResponseServeId;
                    mServingActorId = Actor.Id;
                    mActorServePos = new Vector2(mSelfActor.Position.X, mSelfActor.Position.Y);

                    mSelfActor.MoveTo(mSelfBot.ServePosition);

                    if (mNextMovementAttempt < 50)
                    {
                        mNextMovementAttempt = 50;
                    }
                }

                if (mNextSpeechAttempt < 50)
                {
                    mNextSpeechAttempt += 10;
                }
            }
        }
Example #9
0
        public async void ReadMessage()
        {
            var client = new ClientWebSocket();
            var cts    = new CancellationTokenSource();

            await client.ConnectAsync(new Uri(_conversation.StreamUrl), cts.Token);

            await Task.Factory.StartNew(async() =>
            {
                while (true)
                {
                    WebSocketReceiveResult result;
                    var message = new ArraySegment <byte>(new byte[4096]);
                    do
                    {
                        result = await client.ReceiveAsync(message, cts.Token);
                        if (result.MessageType != WebSocketMessageType.Text)
                        {
                            break;
                        }
                        var messageBytes        = message.Skip(message.Offset).Take(result.Count).ToArray();
                        string messageJson      = Encoding.UTF8.GetString(messageBytes);
                        BotResponse botResponse = JsonConvert.DeserializeObject <BotResponse>(messageJson);

                        var args        = new BotResponseEventAgrs();
                        args.Activities = botResponse.Activities;

                        MessageRecieved?.Invoke(this, args);
                    }while (!result.EndOfMessage);
                }
            }, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
        }
Example #10
0
        void Interaction_ResponseReceived(object sender, ResponseGeneratedEventArgs e)
        {
            try
            {
                this.InvokeIfRequired(panel =>
                {
                    BotResponse botResponse = e.Response as BotResponse;
                    if (botResponse == null)
                    {
                        return;
                    }
                    try
                    {
                        richEditControl.CreateNewDocument();
                        richEditControl.Document.BeginUpdate();
                        richEditControl.Document.RtfText       = botResponse.RtfText;
                        richEditControl.Document.CaretPosition = richEditControl.Document.Range.Start;
                    }
                    finally { richEditControl.Document.EndUpdate(); }
                    richEditControl.ScrollToCaret();

                    waitLabelControl.Visible = false;
                    richEditControl.Visible  = true;
                });
            }
            catch (Exception) { }
        }
Example #11
0
        /// <summary>
        /// Executes dialog/button.
        /// Dialogs returns redirect or messages. Buttons mostly just result in message;
        /// </summary>
        public async virtual Task <BotResponse> Execute(IUser user)
        {
            if (!ValidateUser(user.UserRole))
            {
                return(new BotExceptionResponse(null, "txt_accessDenied", user, true));
            }

            OperationResult opResult = new OperationResult();
            object          data     = null;

            // aware context controller about op. execution
            if (Operation != null)
            {
                opResult = await Operation.Execute(user);

                if (opResult.ResultType == OperationResult.OperationResultType.Failed ||
                    opResult.ResultType == OperationResult.OperationResultType.Unknown)
                {
                    return(new BotExceptionResponse(opResult.ExceptionMessage, "txt_internalServerError", user, true));
                }
                else
                {
                    // keep op. data
                    data = opResult.Result;
                }
            }

            BotResponse response = new BotResponse(data, BotResponse.ResponseType.Dialog, user, this);

            return(response);
        }
Example #12
0
        /// <summary>
        /// client receive message loop
        /// </summary>
        /// <returns></returns>
        public async Task ClientMessageLoop()
        {
            while (!cancellationTokenSource.IsCancellationRequested)
            {
                if (!await client.ResponseStream.MoveNext())
                {
                    break;
                }
                var response = client.ResponseStream.Current;
                if (response.Ctrl != null)
                {
                    Log("Ctrl Message", $"ID={response.Ctrl.Id}  Code={response.Ctrl.Code}  Text={response.Ctrl.Text}  Params={response.Ctrl.Params}");
                    ExecFuture(response.Ctrl.Id, response.Ctrl.Code, response.Ctrl.Text, response.Ctrl.Topic, response.Ctrl.Params);
                }
                else if (response.Data != null)
                {
                    OnServerDataEvent(new ServerDataEventArgs(response.Data.Clone()));
                    if (response.Data.FromUserId != BotUID)
                    {
                        ClientPost(NoteRead(response.Data.Topic, response.Data.SeqId));
                        Thread.Sleep(50);
                        if (BotResponse != null)
                        {
                            var reply = await BotResponse.ThinkAndReply(response.Data.Clone());

                            //if the response is null, means no need to reply
                            if (reply != null)
                            {
                                ClientPost(Publish(response.Data.Topic, reply));
                            }
                        }
                        else
                        {
                            ClientPost(Publish(response.Data.Topic, "I don't know how to talk with you, maybe my father didn't put my brain in my head..."));
                        }
                    }
                }
                else if (response.Pres != null)
                {
                    if (response.Pres.Topic == "me")
                    {
                        if ((response.Pres.What == ServerPres.Types.What.On || response.Pres.What == ServerPres.Types.What.Msg) && !subscriptions.ContainsKey(response.Pres.Src))
                        {
                            ClientPost(Subscribe(response.Pres.Src));
                        }
                        else if (response.Pres.What == ServerPres.Types.What.Off && subscriptions.ContainsKey(response.Pres.Src))
                        {
                            ClientPost(Leave(response.Pres.Src));
                        }
                    }

                    OnServerPresEvent(new ServerPresEventArgs(response.Pres.Clone()));
                }
                else if (response.Meta != null)
                {
                    OnGetMeta(response.Meta);
                    OnServerMetaEvent(new ServerMetaEventArgs(response.Meta.Clone()));
                }
            }
        }
Example #13
0
        public async Task <bool> AddBotResponseToPatternAsync(BotResponse botResponse)
        {
            try
            {
                _chatBotContext.BotResponses.Add(botResponse);
                var res = await _chatBotContext.SaveChangesAsync();

                if (!_contextsResponses.ContainsKey(botResponse.PatternId))
                {
                    _contextsResponses.Add(botResponse.PatternId, new List <BotResponse>()
                    {
                        botResponse
                    });
                }
                else
                {
                    _contextsResponses[botResponse.PatternId].Add(botResponse);
                }

                _logger.LogInformation("Bot response added ({botResponse.Id})", botResponse.Id);
                return(true);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "can't add response to pattern");
                return(false);
            }
        }
Example #14
0
        private async Task <Activity> CreateSimpleAnswer(BotResponse botResponse)
        {
            int random = new Random().Next(botResponse.Text.Count);
            var reply  = MessageFactory.Text(botResponse.Text[random]);

            return(reply);
        }
Example #15
0
        public override async Task <BotResponse> Execute(IUser user)
        {
            // get next dialog and call it
            // if it last or no any dialogs - return container and execute it
            Dialog next = Next(BotManager.Core.BotApiManager.ContextController.GetUserState(user).CurrentDialog);
            object data = null;

            if (next == this)
            {
                var opResult = await Operation.Execute(user);

                if (opResult.ResultType == OperationResult.OperationResultType.Failed || opResult.ResultType == OperationResult.OperationResultType.Unknown)
                {
                    return(new BotExceptionResponse(opResult.ExceptionMessage, "txt_internalServerError", user, true));
                }
                else
                {
                    data = opResult.Result;
                }

                BotResponse response = new BotResponse(data, BotResponse.ResponseType.Dialog, user, this);
                return(response);
            }
            return(await next.Execute(user));
        }
        public async Task <BotResponse> AddBotResponse(BotResponse botResponse)
        {
            await _konekoContext.BotResponses.AddAsync(botResponse);

            await _konekoContext.SaveChangesAsync();

            return(botResponse);
        }
Example #17
0
        public async Task BotTalkAsync()
        {
            if (!BotResponse.IsNullOrEmptyOrWhiteSpace())
            {
                await Context.PostAsync($"{BotResponse}");

                return;
            }
        }
Example #18
0
        private async Task <Activity> CreateSimpleAnswer(BotResponse botResponse)
        {
            int    random     = new Random().Next(botResponse.Text.Count);
            string replySpeak = @"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='de-DE'>
                <voice name='Microsoft Server Speech Text to Speech Voice (es-MX, Raul)'>" +
                                $"{botResponse.Text[random]}" + "</voice></speak>";
            var reply = MessageFactory.Text(botResponse.Text[random], replySpeak);

            return(reply);
        }
Example #19
0
        private void RespondToEvent(string Event)
        {
            BotResponse Response = mSelfBot.GetResponseForMessage(Event);

            if (Response != null)
            {
                mSelfActor.Chat(Response.GetResponse());
            }

            mChatDelayer = UnixTimestamp.GetCurrent();
        }
Example #20
0
        private static async Task Main(string[] args)
        {
            // set debug level
            foreach (var arg in args)
                if (arg == "--debug")
                    Log.ShowDebug = true;

            // selamat datang
            Console.Title = AppNameWithVersion;
            var log = new Log("Main");
            log.Info(AppNameWithVersion);
            log.Debug("Working Directory: {0}", WorkingDirectory);
            log.Debug("Data Directory: {0}", DataDirectory);

            // buka konfigurasi
            var isBotConfigLoaded = Bot.Loaded();
            var isBotResponseLoaded = BotResponse.Loaded();
            if (!isBotConfigLoaded || !isBotResponseLoaded) Terminate(1);

            // bot menerima pesan
            while (true)
                try
                {
                    log.Debug("Mengakses akun bot...");

                    var receive = await BotClient.StartReceivingMessage();

                    if (receive) break;
                }
                catch (Exception ex)
                {
                    log.Error(ex.Message);
                    Task.Delay(10000).Wait();
                }

            // reSchedule
            Schedule.ReSchedule();

            // chatbot load library
            await ChatBot.LoadLibraryAsync();

            // tunggu key ctrl+c untuk keluar dari aplikasi
            var exitEvent = new ManualResetEvent(false);
            Console.CancelKeyPress += (sender, eventArgs) =>
            {
                eventArgs.Cancel = true;
                exitEvent.Set();
            };
            exitEvent.WaitOne();

            // keluar dari aplikasi
            Terminate();
        }
Example #21
0
        /// <summary>
        /// Retrieves the activities of the given conversation.
        /// </summary>
        /// <param name="conversationId">The conversation ID.</param>
        /// <param name="watermark">Indicates the most recent message seen (optional).</param>
        /// <returns></returns>
        public IEnumerator GetMessagesCoroutine(string conversationId, string watermark = null)
        {
            if (string.IsNullOrEmpty(conversationId))
            {
                throw new ArgumentException("Conversation ID cannot be null or empty");
            }

            if (IsInitialized)
            {
                Debug.Log("GetMessagesCoroutine: " + conversationId);

                string uri = DirectLineConversationsApiUri
                             + "/" + conversationId
                             + "/" + DirectLineActivitiesApiUriPostfix;

                if (!string.IsNullOrEmpty(watermark))
                {
                    uri += "?" + BotJsonProtocol.KeyWatermark + "=" + watermark;
                }

                UnityWebRequest webRequest = CreateWebRequest(WebRequestMethods.Get, uri);
                yield return(webRequest.SendWebRequest());

                if (webRequest.isNetworkError)
                {
                    Debug.Log("Web request failed: " + webRequest.error);
                }
                else
                {
                    string responseAsString = webRequest.downloadHandler.text;

                    if (!string.IsNullOrEmpty(responseAsString))
                    {
                        //Debug.Log("Received response:\n" + responseAsString);
                        BotResponseEventArgs eventArgs = CreateBotResponseEventArgs(responseAsString);

                        if (BotResponse != null)
                        {
                            BotResponse.Invoke(this, eventArgs);
                        }
                    }
                    else
                    {
                        Debug.Log("Received an empty response");
                    }
                }
            }
            else
            {
                Debug.Log("Bot Direct Line manager is not initialized");
                yield return(null);
            }
        }
Example #22
0
        public static Activity CreateReply(this Activity activity, BotResponse response, BotResponseBuilder responseBuilder = null, StringDictionary tokens = null)
        {
            var reply = activity.CreateReply();

            if (responseBuilder == null)
            {
                responseBuilder = BotResponseBuilder();
            }

            responseBuilder.BuildMessageReply(reply, response, tokens);
            return(reply);
        }
        public async Task <bool> RemoveBotResponse(BotResponse botResponse)
        {
            if (botResponse is null)
            {
                return(false);
            }

            _konekoContext.Remove(botResponse);
            await _konekoContext.SaveChangesAsync();

            return(true);
        }
Example #24
0
        /// <summary>
        /// Sends the given message to the given conversation.
        /// </summary>
        /// <param name="conversationId">The conversation ID.</param>
        /// <param name="fromId">The ID of the sender.</param>
        /// <param name="message">The message to sent.</param>
        /// <param name="fromName">The name of the sender (optional).</param>
        /// <returns></returns>
        public IEnumerator SendMessageCoroutine(string conversationId, string fromId, string message, string fromName = null)
        {
            if (string.IsNullOrEmpty(conversationId))
            {
                throw new ArgumentException("Conversation ID cannot be null or empty");
            }

            if (IsInitialized)
            {
                Debug.Log("SendMessageCoroutine: " + conversationId + "; " + message);

                var body = new MessageActivity(fromId, message, DirectLineChannelId, null, fromName).ToJsonString();
                body = body.Replace("\"channelId\": \"directline\", ", "\"locale\": \"en-EN\", ");
                UnityWebRequest webRequest = CreateWebRequest(
                    WebRequestMethods.Post,
                    DirectLineConversationsApiUri
                    + "/" + conversationId
                    + "/" + DirectLineActivitiesApiUriPostfix,
                    body);

                yield return(webRequest.SendWebRequest());

                if (webRequest.isNetworkError)
                {
                    Debug.Log("Web request failed: " + webRequest.error);
                }
                else
                {
                    string responseAsString = webRequest.downloadHandler.text;

                    if (!string.IsNullOrEmpty(responseAsString))
                    {
                        //Debug.Log("Received response:\n" + responseAsString);
                        BotResponseEventArgs eventArgs = CreateBotResponseEventArgs(responseAsString);

                        if (BotResponse != null)
                        {
                            BotResponse.Invoke(this, eventArgs);
                        }
                    }
                    else
                    {
                        Debug.Log("Received an empty response");
                    }
                }
            }
            else
            {
                Debug.Log("Bot Direct Line manager is not initialized");
                yield return(null);
            }
        }
Example #25
0
        public static Activity CreateAdaptiveCardReply <T>(this Activity activity, BotResponse response, string cardPath, T cardDataAdapter, BotResponseBuilder responseBuilder = null, StringDictionary tokens = null, Activity replyToUse = null)
            where T : CardDataBase
        {
            var reply = replyToUse ?? activity.CreateReply();

            if (responseBuilder == null)
            {
                responseBuilder = BotResponseBuilder();
            }

            responseBuilder.BuildAdaptiveCardReply(reply, response, cardPath, cardDataAdapter, tokens);
            return(reply);
        }
Example #26
0
        protected Attachment ToAdaptiveCardForOtherFlows(
            List<TaskItem> todos,
            int allTaskCount,
            string taskContent,
            BotResponse botResponse1,
            BotResponse botResponse2)
        {
            var toDoCard = new AdaptiveCard();
            var showText = Format(botResponse2.Reply.Text, new StringDictionary() { { "taskCount", allTaskCount.ToString() } });
            var speakText = Format(botResponse1.Reply.Speak, new StringDictionary() { { "taskContent", taskContent } })
                + Format(botResponse2.Reply.Speak, new StringDictionary() { { "taskCount", allTaskCount.ToString() } });
            toDoCard.Speak = speakText;

            var body = new List<AdaptiveElement>();
            var textBlock = new AdaptiveTextBlock
            {
                Text = showText,
            };
            body.Add(textBlock);

            var container = new AdaptiveContainer();
            foreach (var todo in todos)
            {
                var columnSet = new AdaptiveColumnSet();

                var icon = new AdaptiveImage();
                icon.UrlString = todo.IsCompleted ? IconImageSource.CheckIconSource : IconImageSource.UncheckIconSource;
                var iconColumn = new AdaptiveColumn();
                iconColumn.Width = "auto";
                iconColumn.Items.Add(icon);
                columnSet.Columns.Add(iconColumn);

                var content = new AdaptiveTextBlock(todo.Topic);
                var contentColumn = new AdaptiveColumn();
                iconColumn.Width = "auto";
                contentColumn.Items.Add(content);
                columnSet.Columns.Add(contentColumn);

                container.Items.Add(columnSet);
            }

            body.Add(container);
            toDoCard.Body = body;

            var attachment = new Attachment()
            {
                ContentType = AdaptiveCard.ContentType,
                Content = toDoCard,
            };
            return attachment;
        }
Example #27
0
        /// <summary>
        /// Tries to process a given chat message and checks if the current room bot should respond.
        /// </summary>
        /// <param name="Text">The chat message to process.</param>
        private void handleBotResponse(string Text)
        {
            if (Session.roomInstance.getRoomBot(Session.roomID) != null)
            {
                roomUser Me  = Session.roomInstance.getRoomUser(Session.ID);
                roomUser Bot = Session.roomInstance.getRoomBot(Session.roomID);
                if (Bot != null)
                {
                    BotResponse bResponse = Bot.bInfo.GetResponse(Text);
                    if (bResponse != null)
                    {
                        if (bResponse.ResponseText != null && bResponse.ResponseType != null)
                        {
                            switch (bResponse.ResponseType)
                            {
                            case "say":
                                Session.roomInstance.sendTalk(Bot.ID, Bot.X, Bot.Y, bResponse.ResponseText);
                                break;

                            case "shout":
                                Session.roomInstance.sendShout(Bot.ID, Bot.X, Bot.Y, bResponse.ResponseText);
                                break;
                            }
                        }
                        if (bResponse.ServeId != 0)
                        {
                            Items.carryItemHelper.setHandItem(ref Me, bResponse.ServeId.ToString());
                        }
                    }
                }
            }

            /*if (Bot != null)
             *  if (Bot.bInfo.triggerResponse != null)
             *      foreach (KeyValuePair<string, string> pair in Bot.bInfo.triggerResponse)
             *          if (Text.ToLower().Contains(pair.Key))
             *          {
             *              if (pair.Value.Contains("}"))
             *              {
             *                  String[] pairArgs = pair.Value.Split('}');
             *                  Items.carryItemHelper.setHandItem(ref Me, pairArgs[0]);
             *                  Session.roomInstance.sendShout(Bot.ID, Bot.X, Bot.Y, pairArgs[1]);
             *              }
             *              else
             *              {
             *                  Session.roomInstance.sendShout(Bot.ID, Bot.X, Bot.Y, pair.Value);
             *              }
             *              break;
             *          }
             * }*/
        }
Example #28
0
        public async void SendGreeting()
        {
            var mention = string.Empty;

            foreach (var member in _message.NewChatMembers)
            {
                var usernameExist = !string.IsNullOrWhiteSpace(member.Username);
                if (usernameExist && member.Username.Equals(Bot.Username, StringComparison.OrdinalIgnoreCase))
                {
                    Command.Start(_message);
                    return;
                }

                if (!string.IsNullOrWhiteSpace(mention))
                {
                    mention += " ";
                }

                var name = (member.FirstName + " " + member.LastName).Trim();
                if (string.IsNullOrWhiteSpace(name))
                {
                    name = member.Username;
                }
                if (string.IsNullOrWhiteSpace(name))
                {
                    name = member.Id.ToString();
                }

                mention += $"[{name}](tg://user?id={member.Id}),";
            }

            if (string.IsNullOrWhiteSpace(mention))
            {
                return;
            }

            // cari kontak yg ada
            var exist = await _db.FindContact(_message.Chat.Id);

            if (!exist.Greeting)
            {
                return;
            }

            var welcome = BotResponse.WelcomeToGroup()
                          .Replace("{member}", mention.TrimEnd(','))
                          .Replace("{group}", _message.ChatName());

            await BotClient.SendTextAsync(_message, welcome, parse : ParseMode.Markdown);
        }
        public Task <bool> Handle(RepostCommand request, CancellationToken cancellationToken)
        {
            var destination = new Destination()
            {
                ChannelId = _appConfig.SkypeOfficeChat, UserId = "", Messenger = Messenger.Skype
            };
            var botResponse = new BotResponse()
            {
                Text = request.Text
            };

            _messageSender.SendAsync(destination, botResponse, _skypeSender);
            return(Task.FromResult(true));
        }
Example #30
0
        public BotResponse GetResponse(TimeSpan time)
        {
            SetDuration(time);

            var path = DecisionMaker.GetMove(Field, Opponent, Current, Next, State.Round);
            var move = new MoveInstruction(path.Moves.ToArray());

            var response = new BotResponse()
            {
                Move = move,
                Log  = DecisionMaker.GetLog(),
            };

            return(response);
        }