Exemplo n.º 1
0
 public static void ChatCommandMessageReceived(ChatMessageCommandViewModel chatCommandMessage)
 {
     if (GlobalEvents.OnChatCommandMessageReceived != null)
     {
         GlobalEvents.OnChatCommandMessageReceived(null, chatCommandMessage);
     }
 }
Exemplo n.º 2
0
        private async Task AddMessage(ChatMessageViewModel message)
        {
            this.Messages.Add(message);

            if (!this.ChatUsers.ContainsKey(message.User.ID))
            {
                await this.AddUser(message.User);
            }

            if (this.DisableChat && !message.ID.Equals(Guid.Empty))
            {
                await this.DeleteMessage(message.ID);

                return;
            }

            string moderationReason;

            if (message.ShouldBeModerated(out moderationReason))
            {
                await this.DeleteMessage(message.ID);

                string whisperMessage = " due to chat moderation for the following reason: " + moderationReason + ". Please watch what you type in chat or further actions will be taken.";

                message.User.ChatOffenses++;
                if (ChannelSession.Settings.ModerationTimeout5MinuteOffenseCount > 0 && message.User.ChatOffenses >= ChannelSession.Settings.ModerationTimeout5MinuteOffenseCount)
                {
                    await this.Whisper(message.User.UserName, "You have been timed out from chat for 5 minutes" + whisperMessage);

                    await this.TimeoutUser(message.User.UserName, 300);
                }
                else if (ChannelSession.Settings.ModerationTimeout1MinuteOffenseCount > 0 && message.User.ChatOffenses >= ChannelSession.Settings.ModerationTimeout1MinuteOffenseCount)
                {
                    await this.Whisper(message.User.UserName, "You have been timed out from chat for 1 minute" + whisperMessage);

                    await this.TimeoutUser(message.User.UserName, 60);
                }
                else
                {
                    await this.Whisper(message.User.UserName, "Your message has been deleted" + whisperMessage);
                }
                return;
            }

            if (ChannelSession.IsStreamer && ChatMessageCommandViewModel.IsCommand(message) && !message.User.Roles.Contains(UserRole.Banned))
            {
                ChatMessageCommandViewModel messageCommand = new ChatMessageCommandViewModel(message);

                GlobalEvents.ChatCommandMessageReceived(messageCommand);

                PermissionsCommandBase command = ChannelSession.AllChatCommands.FirstOrDefault(c => c.ContainsCommand(messageCommand.CommandName));
                if (command != null)
                {
                    await command.Perform(message.User, messageCommand.CommandArguments);
                }
            }
        }
        private async void GlobalEvents_OnChatCommandMessageReceived(object sender, ChatMessageCommandViewModel e)
        {
            if (this.giveawayEnabled)
            {
                if (this.selectedWinner == null && e.CommandName.Equals(ChannelSession.Settings.GiveawayCommand))
                {
                    if (this.enteredUsers.Contains(e.User))
                    {
                        await ChannelSession.Chat.Whisper(e.User.UserName, "You have already entered into this giveaway, stay tuned to see who wins!");

                        return;
                    }

                    bool isUserValid = true;
                    if (ChannelSession.Settings.GiveawayUserRole == UserRole.Follower)
                    {
                        isUserValid = e.User.IsFollower;
                    }
                    else if (ChannelSession.Settings.GiveawayUserRole == UserRole.Subscriber)
                    {
                        isUserValid = e.User.Roles.Contains(UserRole.Subscriber);
                    }

                    if (isUserValid)
                    {
                        if (ChannelSession.Settings.GiveawayRankRequirement != null && ChannelSession.Settings.GiveawayRankRequirement.GetCurrency() != null)
                        {
                            UserCurrencyDataViewModel rankData = e.User.Data.GetCurrency(ChannelSession.Settings.GiveawayRankRequirement.GetCurrency());
                            if (!ChannelSession.Settings.GiveawayRankRequirement.DoesMeetRankRequirement(e.User.Data))
                            {
                                await ChannelSession.Settings.GiveawayRankRequirement.SendRankNotMetWhisper(e.User);

                                return;
                            }
                        }

                        if (ChannelSession.Settings.GiveawayCurrencyRequirement != null && ChannelSession.Settings.GiveawayCurrencyRequirement.GetCurrency() != null)
                        {
                            UserCurrencyDataViewModel currencyData = e.User.Data.GetCurrency(ChannelSession.Settings.GiveawayCurrencyRequirement.GetCurrency());
                            if (!ChannelSession.Settings.GiveawayCurrencyRequirement.TrySubtractAmount(e.User.Data))
                            {
                                await ChannelSession.Settings.GiveawayCurrencyRequirement.SendCurrencyNotMetWhisper(e.User);

                                return;
                            }
                        }

                        await ChannelSession.Chat.Whisper(e.User.UserName, "You have been entered into the giveaway, stay tuned to see who wins!");

                        await this.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            if (!this.enteredUsers.Contains(e.User))
                            {
                                this.enteredUsers.Add(e.User);
                            }
                        }));
                    }
                    else
                    {
                        await ChannelSession.Chat.Whisper(e.User.UserName, string.Format("You are not able to enter this giveaway as it is only for {0}", ChannelSession.Settings.GiveawayUserRole));
                    }
                }
                else if (this.selectedWinner != null && e.CommandName.Equals("claim") && this.selectedWinner.Equals(e.User))
                {
                    await ChannelSession.Chat.SendMessage(string.Format("@{0} has claimed their prize! Listen closely to the streamer for instructions on getting your prize.", e.User.UserName));

                    await this.EndGiveaway();
                }
            }
        }