Example #1
0
        public void HandleItemLookup(ICommandContext context,
                                     [Parameter("Item name to lookup.")]
                                     string name,
                                     [Parameter("Maximum amount of results to return.")]
                                     int?maxResults)
        {
            List <Item2Entry> searchResults = SearchManager.Instance
                                              .Search <Item2Entry>(name, context.Language, e => e.LocalizedTextIdName, true)
                                              .Take(maxResults ?? 25)
                                              .ToList();

            if (searchResults.Count == 0)
            {
                context.SendMessage($"Item lookup results was 0 entries for '{name}'.");
                return;
            }

            context.SendMessage($"Item lookup results for '{name}' ({searchResults.Count}):");

            var target = context.GetTargetOrInvoker <Player>();

            foreach (Item2Entry itemEntry in searchResults)
            {
                var builder = new ChatMessageBuilder
                {
                    Type = ChatChannelType.System,
                    Text = $"({itemEntry.Id}) "
                };
                builder.AppendItem(itemEntry.Id);
                target.Session.EnqueueMessageEncrypted(builder.Build());
            }
        }
        public void FakeRaiseMessage(string message, string channelName = null, string username = null)
        {
            if (channelName == null)
            {
                channelName = "fakeChannelName";
            }
            if (username == null)
            {
                username = "******";
            }
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(username)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithChannel(channelName)
                              .WithMessage(message)
                              .Build();

            var handler = OnMessageReceived;

            if (handler == null)
            {
                throw new Exception("In FakeRaiseMessage: No handler has been defined.");
            }
            handler.Invoke(this, new OnMessageReceivedArgs {
                ChatMessage = chatMessage
            });
        }
        [TestCase(true, 0)]         // if marker document does exist, don't create/update it
        public async Task Create_recent_activity_marker_document_if_necessary(bool documentAlreadyExists, int timesCalled)
        {
            // arrange
            var username = "******";

            _mockBucket.Setup(x => x.ExistsAsync($"{username}::arrived_recently"))
            .ReturnsAsync(documentAlreadyExists);
            var twitchLibMessage = TwitchLibMessageBuilder.Create().WithUsername(username).Build();
            var chatMessage      = ChatMessageBuilder.Create().WithTwitchLibMessage(twitchLibMessage).Build();
            var request          = new UserHasArrived(chatMessage);

            _mockBucket.Setup(x => x.GetAsync <TwitcherProfile>(It.IsAny <string>()))
            .ReturnsAsync(new FakeOperationResult <TwitcherProfile> {
                Value = new TwitcherProfile()
            });
            _mockTwitchHub.Setup(x => x.ReceiveFanfare(It.IsAny <FanfareInfo>()));

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            _mockBucket.Verify(x => x.UpsertAsync(

                                   It.Is <Document <dynamic> >(x =>
                                                               x.Id == $"{username}::arrived_recently" &&
                                                               x.Expiry == 12 * 60 * 60 * 1000 // 12 hours
                                                               )

                                   ), Times.Exactly(timesCalled));
        }
        public async Task No_fanfare_if_there_is_no_user_profile()
        {
            // arrange
            var username         = "******";
            var twitchLibMessage = TwitchLibMessageBuilder.Create().WithUsername(username).Build();
            var chatMessage      = ChatMessageBuilder.Create().WithTwitchLibMessage(twitchLibMessage).Build();
            var request          = new UserHasArrived(chatMessage);

            // setup: user has NOT arrive recently
            _mockBucket.Setup(m => m.ExistsAsync($"{username}::arrived_recently"))
            .ReturnsAsync(false);
            // setup: don't care about the arrive_recently document being added
            _mockBucket.Setup(m => m.UpsertAsync(It.IsAny <Document <dynamic> >()));
            // setup: user does NOT have a profile
            _mockBucket.Setup(m => m.GetAsync <TwitcherProfile>(username.ToLower()))
            .ReturnsAsync(new FakeOperationResult <TwitcherProfile> {
                Value = null
            });

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            _mockTwitchHub.Verify(m => m.ReceiveFanfare(It.IsAny <FanfareInfo>()), Times.Never);
        }
        public async Task Should_insert_message_into_bucket()
        {
            // arrange
            var expectedUsername = "******" + Guid.NewGuid();
            var expectedMessage  = "some message whatever " + Guid.NewGuid();
            var expectedChannel  = "mychannel" + Guid.NewGuid();
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(expectedUsername)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage(expectedMessage)
                              .WithChannel(expectedChannel)
                              .Build();
            var request = new StoreMessage(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            _mockBucket.Verify(x => x.InsertAsync(It.Is <Document <ChatMessage> >(d => d.Id != Guid.Empty.ToString())), Times.Once());
            _mockBucket.Verify(x => x.InsertAsync(It.Is <Document <ChatMessage> >(d => d.Content.Username == expectedUsername)), Times.Once());
            _mockBucket.Verify(x => x.InsertAsync(It.Is <Document <ChatMessage> >(d => d.Content.Message == expectedMessage)), Times.Once());
            _mockBucket.Verify(x => x.InsertAsync(It.Is <Document <ChatMessage> >(d => d.Content.Channel == expectedChannel)), Times.Once());
        }
        public async Task Show_current_project_url()
        {
            // arrange
            var expectedUrl     = "http://example.org/foo/bar";
            var expectedMessage = $"Current Project is: " + expectedUrl;
            var projectInfo     = new CurrentProjectInfo {
                Url = new Uri(expectedUrl)
            };
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatterusername")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage("!currentproject")
                              .WithChannel("doesntmatterchannel")
                              .Build();
            var request = new SayCurrentProject(chatMessage);

            _mockBucket.Setup(x => x.Get <CurrentProjectInfo>("currentProject"))
            .Returns(new FakeOperationResult <CurrentProjectInfo> {
                Success = true, Value = projectInfo
            });

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            _mockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), expectedMessage, false), Times.Once);
        }
Example #7
0
        public async Task ShoutOut_will_shout_the_given_username()
        {
            // arrange
            var userName         = "******";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage($"!so {userName}")
                              .Build();

            MockApiWrapper.Setup(x => x.DoesUserExist(userName)).ReturnsAsync(true);
            MockCollection.Setup(x => x.ExistsAsync(userName.ToLower(), null))
            .ReturnsAsync(new FakeExistsResult(true));
            MockCollection.Setup(x => x.GetAsync(userName.ToLower(), null))
            .ReturnsAsync(new FakeGetResult(new TwitcherProfile()));
            var shout           = new ShoutOut(chatMessage);
            var expectedMessage = $"Hey everyone, check out @{userName}'s Twitch stream at https://twitch.tv/{userName}";

            // act
            await _handler.Handle(shout, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), expectedMessage, false), Times.Once);
        }
Example #8
0
        /// <summary>
        /// 标记消息为已读
        /// </summary>
        /// <param name="message">消息</param>
        /// <returns>结果</returns>
        public async Task <bool> NoteRead(ChatMessage message)
        {
            //判断消息是否位于消息列表中
            if (!instance.MessageList.Contains(message))
            {
                //消息不存在返回假
                return(false);
            }

            //调用消息控制器标记消息为已读
            MessageController messageController = new MessageController(db.Messages);

            messageController.SetMessage(message);
            messageController.NoteRead();

            //向服务器发送已读消息请求
            client.NoteMessage(instance, message);

            //更新话题时间戳
            instance.Read     = message.SeqId;
            instance.LastUsed = ChatMessageBuilder.GetTimeStamp();
            var dbContext = db.Topics.GetRepository();
            await dbContext.UpsertTopic(instance);

            //标记成功返回真
            return(true);
        }
Example #9
0
        public async Task ShoutOut_WILL_shout_if_the_given_username_is_a_real_twitch_user()
        {
            // arrange
            var userLookup       = "doesntmattereither";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage($"!so {userLookup}")
                              .Build();

            MockApiWrapper.Setup(x => x.DoesUserExist(userLookup)).ReturnsAsync(true);
            MockCollection.Setup(x => x.ExistsAsync(userLookup.ToLower(), null))
            .ReturnsAsync(new FakeExistsResult(true));
            MockCollection.Setup(x => x.GetAsync(userLookup.ToLower(), null))
            .ReturnsAsync(new FakeGetResult(new TwitcherProfile()));

            var shout = new ShoutOut(chatMessage);

            // act
            await _handler.Handle(shout, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), It.IsAny <string>(), false), Times.Once);
        }
        public async Task Send_farfare_notice_when_user_has_fanfare_and_is_arriving(bool hasFanfare, int timesSent)
        {
            // arrange
            var username        = "******";
            var expectedFanfare = new FanfareInfo
            {
                Message          = "message " + Guid.NewGuid(),
                Timeout          = 12312,
                YouTubeCode      = "ytcode" + Guid.NewGuid(),
                YouTubeStartTime = 111,
                YouTubeEndTime   = 222
            };
            var twitchLibMessage = TwitchLibMessageBuilder.Create().WithUsername(username).Build();
            var chatMessage      = ChatMessageBuilder.Create().WithTwitchLibMessage(twitchLibMessage).Build();
            var request          = new UserHasArrived(chatMessage);

            MockCollection.Setup(x => x.ExistsAsync($"{username}::arrived_recently", null))
            .ReturnsAsync(new FakeExistsResult(false));
            MockCollection.Setup(x => x.GetAsync(It.IsAny <string>(), null))
            .ReturnsAsync(new FakeGetResult(new TwitcherProfile {
                HasFanfare = hasFanfare, Fanfare = expectedFanfare
            }));

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            _mockTwitchHub.Verify(x => x.ReceiveFanfare(expectedFanfare), Times.Exactly(timesSent));
        }
        public async Task Should_insert_message_into_bucket()
        {
            // arrange
            var expectedUsername = "******" + Guid.NewGuid();
            var expectedMessage  = "some message whatever " + Guid.NewGuid();
            var expectedChannel  = "mychannel" + Guid.NewGuid();
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(expectedUsername)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage(expectedMessage)
                              .WithChannel(expectedChannel)
                              .Build();
            var request = new StoreMessage(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockCollection.Verify(x => x.InsertAsync(It.IsAny <string>(), It.IsAny <ChatMessage>(), null), Times.Once());
            MockCollection.Verify(x => x.InsertAsync(It.IsAny <string>(), It.Is <ChatMessage>(d => d.Username == expectedUsername), null), Times.Once());
            MockCollection.Verify(x => x.InsertAsync(It.IsAny <string>(), It.Is <ChatMessage>(d => d.Message == expectedMessage), null), Times.Once());
            MockCollection.Verify(x => x.InsertAsync(It.IsAny <string>(), It.Is <ChatMessage>(d => d.Channel == expectedChannel), null), Times.Once());
        }
        public async Task If_no_current_project_set_show_default_message()
        {
            // arrange
            var expectedDefaultMessage = "I haven't set any current project yet, sorry!";
            var twitchLibMessage       = TwitchLibMessageBuilder.Create()
                                         .WithUsername("doesntmatterusername")
                                         .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage("!currentproject")
                              .WithChannel("doesntmatterchannel")
                              .Build();
            var request = new SayCurrentProject(chatMessage);

            _mockBucket.Setup(x => x.Get <CurrentProjectInfo>("currentProject"))
            .Returns(new FakeOperationResult <CurrentProjectInfo> {
                Success = false
            });

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            _mockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), expectedDefaultMessage, false), Times.Once);
        }
        public async Task Create_recent_activity_marker_document_if_necessary()
        {
            // arrange
            var username = "******";

            MockCollection.Setup(x => x.ExistsAsync($"{username}::arrived_recently", null))
            .ReturnsAsync(new FakeExistsResult(false));
            var twitchLibMessage = TwitchLibMessageBuilder.Create().WithUsername(username).Build();
            var chatMessage      = ChatMessageBuilder.Create().WithTwitchLibMessage(twitchLibMessage).Build();
            var request          = new UserHasArrived(chatMessage);

            MockCollection.Setup(x => x.GetAsync(It.IsAny <string>(), null))
            .ReturnsAsync(new FakeGetResult(new TwitcherProfile()));
            _mockTwitchHub.Setup(x => x.ReceiveFanfare(It.IsAny <FanfareInfo>()));

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockCollection.Verify(x => x.UpsertAsync(
                                      It.Is <string>(k => k == $"{username}::arrived_recently"),
                                      It.IsAny <UserHasArrivedMarker>(),
                                      It.IsAny <UpsertOptions>()), Times.Once);
            MockCollection.Verify(x => x.UpsertAsync(
                                      It.IsAny <string>(),
                                      It.IsAny <UserHasArrivedMarker>(),
                                      It.Is <UpsertOptions>(u =>
                                                            (u.GetInternalPropertyValue <TimeSpan, UpsertOptions>("ExpiryValue")).Hours == 12)),
                                  Times.Once);
        }
Example #14
0
        public async Task ShoutOut_will_use_custom_message_if_there_is_one()
        {
            // arrange
            var userProfile = new TwitcherProfile {
                ShoutMessage = "hey hey look at me" + Guid.NewGuid()
            };
            var userName             = "******";
            var expectedShoutMessage = userProfile.ShoutMessage + $" https://twitch.tv/{userName}";
            var twitchLibMessage     = TwitchLibMessageBuilder.Create()
                                       .WithUsername("doesntmatter")
                                       .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage($"!so {userName}")
                              .Build();

            MockApiWrapper.Setup(x => x.DoesUserExist(userName)).ReturnsAsync(true);
            MockCollection.Setup(x => x.ExistsAsync(userName.ToLower(), null))
            .ReturnsAsync(new FakeExistsResult(true));
            MockCollection.Setup(x => x.GetAsync(userName.ToLower(), null))
            .ReturnsAsync(new FakeGetResult(userProfile));
            var shout = new ShoutOut(chatMessage);

            // act
            await _handler.Handle(shout, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), expectedShoutMessage, false), Times.Once);
        }
        public async Task Is_chat_message_stored()
        {
            // arrange
            var expectedUsername = "******" + Guid.NewGuid();
            var expectedMessage  = "some message whatever " + Guid.NewGuid();
            var expectedChannel  = "mychannel" + Guid.NewGuid();
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(expectedUsername)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage(expectedMessage)
                              .WithChannel(expectedChannel)
                              .Build();
            var request = new StoreMessage(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            var n1ql   = $"SELECT RAW COUNT(*) FROM `{Bucket.Name}` WHERE message = $expectedMessage";
            var result = await TestCluster.QueryAsync <int>(n1ql,
                                                            QueryOptions.Create().Parameter("expectedMessage", expectedMessage).ScanConsistency(QueryScanConsistency.RequestPlus));

            var count = await result.Rows.FirstOrDefaultAsync();

            Assert.That(count, Is.EqualTo(1));
        }
Example #16
0
        /// <summary>
        /// 增加订阅者(群组话题使用)
        /// </summary>
        /// <param name="subsricber">订阅者对象</param>
        /// <returns>结果</returns>
        public async Task <bool> AddSubscriber(Subscriber subscriber)
        {
            //判断订阅者是否位于订阅者列表中
            if (instance.SubsriberList.Contains(subscriber))
            {
                //重复添加返回假
                return(false);
            }
            subscriber.TopicName = instance.Name;
            instance.SubsriberList.Add(subscriber);

            //调用订阅者控制器更新订阅者
            SubscriberController subscriberController = new SubscriberController(db.Subscribers);

            subscriberController.SetSubscriber(subscriber);
            subscriberController.UpsertSubscriber();

            //更新话题时间戳
            instance.LastUsed = ChatMessageBuilder.GetTimeStamp();
            var dbContext = db.Topics.GetRepository();
            await dbContext.UpsertTopic(instance);

            //添加成功返回真
            return(true);
        }
Example #17
0
        public WhenUserCommandReceived()
        {
            Sut
            .AddCommand(MockedUserCommand1.Object)
            .AddCommand(MockedUserCommand2.Object);

            ChatMessage = ChatMessageBuilder
                          .Create()
                          .Build();

            Sut.Enable(MockedUserCommand1.Object.Name);

            var userCommandName = MockedUserCommand1.Object.Name;

            UserCommandArgs = new OnUserCommandReceivedArgs(ChatMessage, Array.Empty <String>());

            var userCommandArgs = UserCommandArgs;

            MockedUserCommandValidator
            .Setup(x => x.TryValidateCommand(ChatMessage, out userCommandName, out userCommandArgs))
            .Returns(true);

            MessageArgs = new OnMessageReceivedArgs()
            {
                ChatMessage = ChatMessage
            };

            MockedTwitchClient.Raise(x => x.OnMessageReceived += null, MessageArgs);
        }
Example #18
0
        public async Task ShoutOut_is_limited_to_mods_and_subs(bool isSub, bool isMod, int numVerified)
        {
            // arrange
            var userToShout      = "someusername";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("NonSub")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage($"!so {userToShout}")
                              .WithIsSubscriber(isSub)
                              .WithIsModerator(isMod)
                              .Build();
            var request = new ShoutOut(chatMessage);

            MockApiWrapper.Setup(m =>
                                 m.DoesUserExist(It.IsAny <string>())).ReturnsAsync(true);
            MockCollection.Setup(m => m.ExistsAsync(userToShout, null))
            .ReturnsAsync(new FakeExistsResult(true));
            MockCollection.Setup(m => m.GetAsync(userToShout, null))
            .ReturnsAsync(new FakeGetResult(new TwitcherProfile()));

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), It.IsAny <string>(), false),
                                    Times.Exactly(numVerified));
        }
Example #19
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="message">消息</param>
        /// <returns></returns>
        public async void SendMessage(ChatMessage message)
        {
            //话题更新时间戳
            instance.LastUsed = ChatMessageBuilder.GetTimeStamp();
            var dbContext = db.Topics.GetRepository();
            await dbContext.UpsertTopic(instance);

            client.Send(instance, message, false);
        }
Example #20
0
        /// <summary>
        /// 设置备注
        /// </summary>
        /// <param name="comment">备注</param>
        /// <returns></returns>
        public async Task SetPrivateComment(string comment)
        {
            client.SetPrivateComment(instance, comment);

            //话题更新时间戳
            instance.LastUsed       = ChatMessageBuilder.GetTimeStamp();
            instance.PrivateComment = comment;
            var dbContext = db.Topics.GetRepository();
            await dbContext.UpsertTopic(instance);
        }
Example #21
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="name">话题名</param>
 public Topic(string name)
 {
     Name          = name;
     Limit         = 24;
     Status        = 0;
     IsVisible     = true;
     LastUsed      = ChatMessageBuilder.GetTimeStamp();
     SubsriberList = new List <Subscriber>();
     MessageList   = new List <ChatMessage>();
 }
 public WhenOnMessageReceived()
 {
     ExpectedMessage     = Guid.NewGuid().ToString();
     ExpectedDisplayName = Guid.NewGuid().ToString();
     ChatMessage         = ChatMessageBuilder
                           .Create()
                           .WithTwitchLibMessage(TwitchLibMessageBuilder
                                                 .Create()
                                                 .WithDisplayName(ExpectedDisplayName))
                           .WithMessage(ExpectedMessage)
                           .Build();
 }
        public void ShouldValidateCommand(String input, String expectedUserCommandName, String[] expectedWords)
        {
            Boolean result = Sut.TryValidateCommand(
                ChatMessageBuilder.Create()
                .WithMessage(input)
                .Build(),
                out var userCommandName,
                out var args);

            result.Should().BeTrue();
            userCommandName.Value.Should().Be(expectedUserCommandName);
            args.Words.Should().Equal(expectedWords);
        }
        public void ShouldIgnoreNonCommand(String input)
        {
            Boolean result = Sut.TryValidateCommand(
                ChatMessageBuilder.Create()
                .WithMessage(input)
                .Build(),
                out var userCommandName,
                out var args);

            result.Should().BeFalse();
            userCommandName.Should().BeNull();
            args.Should().BeNull();
        }
Example #25
0
        /// <summary>
        /// 新增消息
        /// </summary>
        /// <param name="message">消息</param>
        /// <returns>结果</returns>
        public async Task <bool> AddMessage(ChatMessage message)
        {
            //判断消息是否已存在
            //if (instance.MessageList.Contains(message))
            //{
            //已存在则添加失败返回假
            //   return false;
            //}

            int newSeqId = message.SeqId;
            int oldSeqId = instance.MessageList.Count == 0 ? instance.MinLocalSeqId : instance.MessageList[0].SeqId;

            message.TopicName = instance.Name;

            //判断是否为初次添加话题
            if (oldSeqId == 0)
            {
                instance.MessageList.Add(message);

                //更新本地消息序号
                instance.MinLocalSeqId = newSeqId;
                instance.MaxLocalSeqId = newSeqId;

                //判断是否为历史消息
            }
            else if (oldSeqId >= newSeqId)
            {
                instance.MessageList.Insert(0, message);
                instance.MinLocalSeqId = newSeqId;
            }
            else
            {
                instance.MessageList.Add(message);
                instance.MaxLocalSeqId = newSeqId;
            }

            //调用消息控制器添加消息
            MessageController messageController = new MessageController(db.Messages);

            messageController.SetMessage(message);
            messageController.UpsertMessage();

            //话题更新时间戳
            instance.Recieve  = message.SeqId;
            instance.LastUsed = ChatMessageBuilder.GetTimeStamp();
            var dbContext = db.Topics.GetRepository();
            await dbContext.UpsertTopic(instance);

            //添加成功返回真
            return(true);
        }
Example #26
0
        public async Task Commands_returns_the_correct_requests(string command, Type type)
        {
            // arrange
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(_twitchLibMessage)
                              .WithMessage(command)
                              .Build();

            // act
            var result = await _factory.BuildCommand(chatMessage);

            // assert
            Assert.That(result, Is.TypeOf(type));
        }
        private void SendText(string text, string name = "")
        {
            Player player = (Player)Invoker;

            foreach (string line in text.Trim().Split(Environment.NewLine))
            {
                var builder = new ChatMessageBuilder
                {
                    Type     = ChatChannelType.System,
                    FromName = name,
                    Text     = line,
                    Guid     = player.Guid
                };
                player.Session.EnqueueMessageEncrypted(builder.Build());
            }
        }
        public void ShouldIgnoreUser(String input)
        {
            foreach (String id in TwitchUserIDs.ChannelBots)
            {
                Boolean result = Sut.TryValidateCommand(
                    ChatMessageBuilder.Create()
                    .WithTwitchLibMessage(TwitchLibMessageBuilder.Create().WithUserId(id).Build())
                    .WithMessage(input)
                    .Build(),
                    out var userCommandName,
                    out var args);

                result.Should().BeFalse();
                userCommandName.Should().BeNull();
                args.Should().BeNull();
            }
        }
        public async Task Valid_url_must_be_passed_in(string message)
        {
            // arrange
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(_mockOptions.Object.Value.Username)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage(message)
                              .Build();
            var request = new SetCurrentProject(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            _mockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), "Sorry, I couldn't understand that URL!", false), Times.Once);
        }
Example #30
0
        public async Task ShoutOut_will_do_nothing_if_no_name_is_given()
        {
            // arrange
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage("!so")
                              .Build();
            var request = new ShoutOut(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), It.IsAny <string>(), false), Times.Never);
        }