示例#1
0
        private void Listen(StateContext context)
        {
            Console.WriteLine("Listening to messages.");
            Console.WriteLine("Press 'a' to answer last message. Press any key to stop listening.");
            using (this.tokenSource = new CancellationTokenSource())
            {
                var bacgroundPrinting = Task.Run((Action)BackGroundPrinting, this.tokenSource.Token);
                var key = Console.ReadKey();

                this.context.LastMessage = this.lastMessage;
                if (key.KeyChar == 'a')
                {
                    Console.WriteLine();
                    this.context.Signals = Signals.ResponseLastChatFromListening;
                }
                else
                {
                    this.context.Signals = Signals.Exit;
                }

                this.tokenSource.Cancel();
                try
                {
                    bacgroundPrinting.Wait();
                }
                catch (AggregateException e)
                {
                    if (!bacgroundPrinting.IsCanceled)
                    {
                        throw new Exception("Listen failed.", e.InnerException);
                    }
                }
            }
        }
        public override void Execute(StateContext context)
        {
            Console.WriteLine($"Enter the message you want to send to {context.MessageDestination} (empty string to abort)");
            string message = Console.ReadLine();

            if (string.IsNullOrEmpty(message))
            {
                context.MessageText        = null;
                context.OutcomeMessageType = OutcomeMessageType.None;
                context.MessageDestination = null;
                if (context.Signals == Signals.TypeInMessageFromListening)
                {
                    context.Signals = Signals.ListenToMessages;
                }
                else if (context.Signals == Signals.TypeInMessage)
                {
                    context.Signals = Signals.Exit;
                }
            }
            context.MessageText = message;
            if (context.Signals == Signals.TypeInMessageFromListening)
            {
                context.Signals = Signals.SendMessageFromListening;
            }
            else if (context.Signals == Signals.TypeInMessage)
            {
                context.Signals = Signals.SendMessage;
            }
            base.Execute(context);
        }
示例#3
0
        private void PrepareDestinationAndOutcomeType(StateContext context)
        {
            context.MessageDestination = null;
            context.OutcomeMessageType = OutcomeMessageType.None;
            if (context.LastMessage == null)
            {
                return;
            }

            if (context.LastMessage.SourceType == IncomeMessageSource.PrivateMessage)
            {
                context.MessageDestination = context.LastMessage.UserName;
                context.OutcomeMessageType = OutcomeMessageType.PrivateMessage;
            }
            else if (context.LastMessage.SourceType == IncomeMessageSource.GroupMessage)
            {
                context.MessageDestination = context.LastMessage.GroupTitle;
                context.OutcomeMessageType = OutcomeMessageType.GroupMessage;
            }
            else if (context.LastMessage.SourceType == IncomeMessageSource.ChannelPost)
            {
                context.MessageDestination = context.LastMessage.ChannelTitle;
                context.OutcomeMessageType = OutcomeMessageType.ChannelPost;
            }
        }
示例#4
0
        public override void Execute(StateContext context)
        {
            PrepareDestinationAndOutcomeType(context);

            if (context.OutcomeMessageType == OutcomeMessageType.None || string.IsNullOrEmpty(context.MessageDestination))
            {
                Console.WriteLine("Can not find message destination user/group/channel.");
                if (context.Signals == Signals.ResponseLastChat)
                {
                    context.Signals = Signals.Exit;
                    Console.ReadKey();
                }
                if (context.Signals == Signals.ResponseLastChatFromListening)
                {
                    context.Signals = Signals.ListenToMessages;
                }
                return;
            }

            if (context.Signals == Signals.ResponseLastChat)
            {
                context.Signals = Signals.TypeInMessage;
            }
            if (context.Signals == Signals.ResponseLastChatFromListening)
            {
                context.Signals = Signals.TypeInMessageFromListening;
            }
            base.Execute(context);
        }
示例#5
0
        public override void Execute(StateContext context)
        {
            Console.Clear();
            Console.WriteLine("Main menu");
            Console.WriteLine("Choose one option :");
            Console.WriteLine("1 : Listen to messages");
            Console.WriteLine("2 : Write new message");
            Console.WriteLine("3 : Answer to last chat");
            var key = Console.ReadKey();

            if (key.KeyChar == '1')
            {
                context.Signals = Signals.ListenToMessages;
            }
            else
            if (key.KeyChar == '2')
            {
                context.Signals = Signals.WriteTo;
            }
            else
            if (key.KeyChar == '3')
            {
                context.Signals = Signals.ResponseLastChat;
            }
            else
            {
                context.Signals = Signals.Exit;
            }
            Console.Clear();
            base.Execute(context);
        }
        public override void Execute(StateContext context)
        {
            bool exists = context.Bot.DestinationExists(context.OutcomeMessageType, context.MessageDestination);

            if (exists)
            {
                context.Signals = Signals.TypeInMessage;
            }
            else
            {
                Console.WriteLine($"Can not write to {context.MessageDestination}. It is not exists or Bot did not receive any message from this user/group/channel.");
                Console.ReadKey();
                context.Signals = Signals.Exit;
            }
            base.Execute(context);
        }
示例#7
0
        public override void Execute(StateContext context)
        {
            var destType    = AskDestinationType();
            var destination = AskDestination(destType);

            if (string.IsNullOrEmpty(destination))
            {
                context.OutcomeMessageType = OutcomeMessageType.None;
                context.MessageDestination = null;
                context.Signals            = Signals.Exit;
                return;
            }
            context.OutcomeMessageType = destType;
            context.MessageDestination = destination;
            context.Signals            = Signals.CheckIfCanFindDestination;
            base.Execute(context);
        }
示例#8
0
        public override void Execute(StateContext context)
        {
            Console.WriteLine("Sending ...");

            SentMessageStatus status = null;

            if (context.OutcomeMessageType == OutcomeMessageType.PrivateMessage)
            {
                status = context.Bot.SendMessageToUser(context.MessageDestination, context.MessageText);
            }
            else if (context.OutcomeMessageType == OutcomeMessageType.GroupMessage)
            {
                status = context.Bot.SendMessageToGroup(context.MessageDestination, context.MessageText);
            }
            else if (context.OutcomeMessageType == OutcomeMessageType.ChannelPost)
            {
                status = context.Bot.SendMessageToChannel(context.MessageDestination, context.MessageText);
            }
            context.MessageText        = null;
            context.OutcomeMessageType = OutcomeMessageType.None;
            context.MessageDestination = null;
            if (status.Ok)
            {
                Console.WriteLine("Sent");
            }
            else
            {
                Console.WriteLine(status.Exception);
            }
            if (context.Signals == Signals.SendMessageFromListening)
            {
                context.Signals = Signals.ListenToMessages;
                return;
            }
            Console.ReadKey();
            context.Signals = Signals.Exit;
            base.Execute(context);
        }
示例#9
0
 public override void Execute(StateContext context)
 {
     this.context = context;
     this.Listen(context);
     base.Execute(context);
 }
示例#10
0
 public virtual void Execute(StateContext context)
 {
     callback?.Invoke();
 }