Exemplo n.º 1
0
        private void OnChatMemberInfo(SteamFriends.ChatMemberInfoCallback callback)
        {
            var stateChangeInfo = callback.StateChangeInfo;
            var chatRoomID      = callback.ChatRoomID;
            var chatterID       = stateChangeInfo.ChatterActedOn;

            if (!ChatRoomManager.ChatRoomExists(chatRoomID) ||
                !UserManager.UserExists(chatterID))
            {
                return;
            }

            var user     = UserManager.GetUser(chatterID);
            var chatRoom = ChatRoomManager.GetChatRoom(chatRoomID);

            switch (stateChangeInfo.StateChange)
            {
            case EChatMemberStateChange.Banned:
            case EChatMemberStateChange.Disconnected:
            case EChatMemberStateChange.Kicked:
            case EChatMemberStateChange.Left:
                Console.WriteLine("Removing {0} from {1}", user.Name, chatRoom.Name);

                // Trigger LeftChat for each module.
                ModuleManager.LeftChat(callback);

                // Remove this user from the chat room.
                chatRoom.RemoveUser(user);
                break;
            }
        }
Exemplo n.º 2
0
 static void OnChatMemberInfo(SteamFriends.ChatMemberInfoCallback callback)
 {
     if (callback.Type == EChatInfoType.StateChange)
     {
         Log.Instance.Info("ChatStateChange " + callback.StateChangeInfo.StateChange + " in " + callback.ChatRoomID + " acted on " + callback.StateChangeInfo.ChatterActedBy + " by " + callback.StateChangeInfo.ChatterActedBy);
         if (callback.StateChangeInfo.StateChange == EChatMemberStateChange.Entered)
         {
             foreach (BaseTrigger trigger in triggers)
             {
                 trigger.OnEnteredChat(callback.ChatRoomID, callback.StateChangeInfo.ChatterActedOn, true);
             }
         }
         else if (callback.StateChangeInfo.StateChange == EChatMemberStateChange.Left)
         {
             foreach (BaseTrigger trigger in triggers)
             {
                 trigger.OnLeftChat(callback.ChatRoomID, callback.StateChangeInfo.ChatterActedOn);
             }
         }
         else if (callback.StateChangeInfo.StateChange == EChatMemberStateChange.Kicked)
         {
             foreach (BaseTrigger trigger in triggers)
             {
                 trigger.OnKickedChat(callback.ChatRoomID, callback.StateChangeInfo.ChatterActedOn, callback.StateChangeInfo.ChatterActedBy, true);
             }
         }
         else if (callback.StateChangeInfo.StateChange == EChatMemberStateChange.Banned)
         {
             foreach (BaseTrigger trigger in triggers)
             {
                 trigger.OnBannedChat(callback.ChatRoomID, callback.StateChangeInfo.ChatterActedOn, callback.StateChangeInfo.ChatterActedBy, true);
             }
         }
     }
 }
Exemplo n.º 3
0
        private static void HandleChatMemberInfoCallback(SteamFriends.ChatMemberInfoCallback msg)
        {
            SteamID Room = msg.ChatRoomID;

            Console.WriteLine("ChatMemberInfoCallback: " +
                              Steam.Friends.GetFriendPersonaName(msg.StateChangeInfo.ChatterActedBy) + " - " +
                              Steam.Friends.GetFriendPersonaName(msg.StateChangeInfo.ChatterActedOn)
                              );
        }
Exemplo n.º 4
0
        /// <summary>
        /// When someone leaves the chat, signal the modules.
        /// </summary>
        /// <param name="callback"></param>
        public void LeftChat(SteamFriends.ChatMemberInfoCallback callback)
        {
            // Get both the global modules and the modules specific to that chatroom.
            var modules = _globalModules.Values.Union(_chatroomModules[callback.ChatRoomID].Values);

            foreach (var module in modules)
            {
                module.OnChatLeave(callback);
            }
        }
Exemplo n.º 5
0
 public void OnChatLeave(SteamFriends.ChatMemberInfoCallback callback)
 {
     if (ChatLeaveCallback != null)
     {
         try
         {
             ChatLeaveCallback(callback);
         }
         catch (Exception e)
         {
             ModuleManager.PrintStackFrame(e);
         }
     }
 }
Exemplo n.º 6
0
        public void OnChatMemberInfo(SteamFriends.ChatMemberInfoCallback callback)
        {
            // If we get kicked, rejoin the chatroom
            if (callback.Type == EChatInfoType.StateChange && callback.StateChangeInfo.ChatterActedOn == Steam.Instance.Client.SteamID)
            {
                Log.WriteInfo("Steam", "State changed for chatroom {0} to {1}", callback.ChatRoomID, callback.StateChangeInfo.StateChange);

                if (callback.StateChangeInfo.StateChange == EChatMemberStateChange.Disconnected ||
                    callback.StateChangeInfo.StateChange == EChatMemberStateChange.Kicked ||
                    callback.StateChangeInfo.StateChange == EChatMemberStateChange.Left)
                {
                    Steam.Instance.Friends.JoinChat(callback.ChatRoomID);
                }
            }
        }
Exemplo n.º 7
0
 private void Chatmemberinfo(SteamFriends.ChatMemberInfoCallback callback)
 {
     if (callback.StateChangeInfo.StateChange != EChatMemberStateChange.Entered)
     {
     }
     else
     {
         if (callback.StateChangeInfo.MemberInfo.Permissions.HasFlag(EChatPermission.MemberDefault))
         {
             ChatroomEntity user = new ChatroomEntity(callback.StateChangeInfo.ChatterActedOn.ConvertToUInt64(), this);
             user.ParentIdentifier = callback.ChatRoomID.ConvertToUInt64();
             ChatMemberInfoProcessEvent(user, true);
         }
         else
         {
             ChatroomEntity user = new ChatroomEntity(callback.StateChangeInfo.ChatterActedOn.ConvertToUInt64(), this);
             user.ParentIdentifier = callback.ChatRoomID.ConvertToUInt64();
             ChatMemberInfoProcessEvent(user, false);
         }
     }
 }
Exemplo n.º 8
0
        private static void OnChatMemberInfo(SteamFriends.ChatMemberInfoCallback callback)
        {
            if (callback.Type != EChatInfoType.StateChange || callback.StateChangeInfo.ChatterActedOn != Steam.Instance.Client.SteamID)
            {
                return;
            }

            Log.WriteInfo("ChatMemberInfo", "State changed for chatroom {0} to {1}", callback.ChatRoomID, callback.StateChangeInfo.StateChange);

            if (callback.StateChangeInfo.StateChange == EChatMemberStateChange.Disconnected ||
                callback.StateChangeInfo.StateChange == EChatMemberStateChange.Kicked ||
                callback.StateChangeInfo.StateChange == EChatMemberStateChange.Left)
            {
                Steam.Instance.Friends.JoinChat(callback.ChatRoomID);

                Steam.Instance.Friends.SendChatRoomMessage(
                    callback.ChatRoomID,
                    EChatEntryType.ChatMsg,
                    string.Format("{0}, please don't do that again :(", Steam.Instance.Friends.GetFriendPersonaName(callback.StateChangeInfo.ChatterActedBy))
                    );
            }
        }
Exemplo n.º 9
0
        private void chatMemberInfoCallback(SteamFriends.ChatMemberInfoCallback callback)
        {
            if (base.listenCallback != null && callback.ChatRoomID.AccountID == this.id.AccountID)
            {
                switch (callback.StateChangeInfo.StateChange)
                {
                case EChatMemberStateChange.Banned:
                case EChatMemberStateChange.Disconnected:
                case EChatMemberStateChange.Kicked:
                case EChatMemberStateChange.Left:
                    base.chattingUserList.Remove(callback.StateChangeInfo.ChatterActedOn);
                    base.ListenCallback(base.createMessageLabel("[" + this.getName() + ": " +
                                                                callback.StateChangeInfo.StateChange + " Event, by " +
                                                                base.core.Steam.SteamFriends.GetFriendPersonaName(callback.StateChangeInfo.ChatterActedOn) + "]"));
                    break;

                case EChatMemberStateChange.Entered:
                    base.chattingUserList.Add(callback.StateChangeInfo.ChatterActedOn);
                    base.ListenCallback(base.createMessageLabel("[" + this.getName() + ": " + base.core.Steam.SteamFriends.GetFriendPersonaName(callback.StateChangeInfo.ChatterActedOn)
                                                                + " joined the chat]"));
                    break;
                }
            }
        }
Exemplo n.º 10
0
        private void OnChatMemberInfo(SteamFriends.ChatMemberInfoCallback callback)
        {
            // TODO: We only care about state changes?
            if (callback.Type != EChatInfoType.StateChange)
            {
                return;
            }

            // Some vars
            var chatRoomID = callback.ChatRoomID;
            var info       = callback.StateChangeInfo;
            var state      = callback.StateChangeInfo.StateChange;

            var settings = kraxbot.GetChatRoomSettings(chatRoomID);

            var userID   = info.ChatterActedOn;
            var userName = GetPlayerName(userID);

            // TODO: Check for default properly
            var user = settings.Users.SingleOrDefault(u => u.SteamID == userID);

            // See what happened
            string message;

            switch (state)
            {
            case EChatMemberStateChange.Entered:      message = "Welcome";      break;                          // Joined

            case EChatMemberStateChange.Left:         message = "Good bye";     break;                          // Left

            case EChatMemberStateChange.Disconnected: message = "RIP";          break;                          // Disconnected

            case EChatMemberStateChange.Kicked:       message = "Bye";          break;                          // Kicked

            case EChatMemberStateChange.Banned:       message = "RIP in peace"; break;                          // Banned

            case EChatMemberStateChange.VoiceSpeaking:     message = "Joined voice chat: "; break;              // Joined voice chat

            case EChatMemberStateChange.VoiceDoneSpeaking: message = "Left voice chat: ";   break;              // Left Voice chat

            default:
                message = $"Error ({state}):";
                break;
            }

            // Check if applied to bot
            if (userID == kraxbot.SteamID)
            {
                kraxbot.SendKraxMessage($"Got {state} from {settings.ChatName}");
                lastChatroom = chatRoomID;
                chatrooms.Remove(chatRoomID);
            }

            // User entered chat
            if (state == EChatMemberStateChange.Entered)
            {
                var member = callback.StateChangeInfo.MemberInfo;

                if (user == default(UserInfo))
                {
                    // User doesn't exist, create
                    user = new UserInfo
                    {
                        Name       = GetPlayerName(userID),
                        SteamID    = userID,
                        Rank       = member.Details,
                        Permission = member.Permissions
                    };

                    settings.Users.Add(user);
                }
                else
                {
                    // User already exists in list, just update values
                    user.Name       = kraxbot.GetFriendPersonaName(userID);
                    user.Rank       = member.Details;
                    user.Permission = member.Permissions;
                }
            }
            else if (user == default(UserInfo))
            {
                Kraxbot.Log($"Warning: Unknown user {userID} in {settings.ChatName}, ignoring message");
                return;
            }

            // User left chat
            else if (state == EChatMemberStateChange.Left)
            {
                user.Disconnects = 0;
                user.LastLeave   = DateTime.Now;
            }

            // Fix for not counting Disconnects when DCKick is set to 'None'
            // When it's 2 it won't say anything anyway
            else if (state == EChatMemberStateChange.Disconnected && settings.DcKick == ESpamAction.None && user.Disconnects < 2)
            {
                user.Disconnects++;
            }

            // Check if we should auto kick/ban
            if (settings.AutoKick.Mode != ESpamAction.None && settings.AutoKick.User == userID)
            {
                switch (settings.AutoKick.Mode)
                {
                case ESpamAction.Ban:
                    kraxbot.BanUser(chatRoomID, userID);
                    kraxbot.SendKraxMessage($"Auto banned {userName} from {settings.ChatName}");
                    break;

                case ESpamAction.Kick:
                    kraxbot.KickUser(chatRoomID, userID);
                    kraxbot.SendKraxMessage($"Auto kicked {userName} from {settings.ChatName}");
                    break;

                    // TODO: Add warning
                }
            }

            // Say welcome message
            if (settings.Welcome)
            {
                if (state == EChatMemberStateChange.Entered)
                {
                    switch (user.Disconnects)
                    {
                    case 0:
                        kraxbot.SendChatRoomMessage(chatRoomID, $"{settings.WelcomeMsg} {userName}{settings.WelcomeEnd}");
                        break;

                    case 1:
                        kraxbot.SendChatRoomMessage(chatRoomID, $"Welcome back {userName}");
                        break;
                    }
                }
                else if (settings.AllStates && user.Disconnects == 0)
                {
                    kraxbot.SendChatRoomMessage(chatRoomID, $"{message} {userName}");
                }
            }

            // Kick or warn user if disconnected enough times
            if (settings.DcKick != ESpamAction.None)
            {
                // If user disconnected, add to counter
                if (state == EChatMemberStateChange.Disconnected)
                {
                    user.Disconnects++;
                }

                // Check disconnects and kick/warn
                // TODO: Make so you can set custom amount
                if (state == EChatMemberStateChange.Entered && user.Disconnects >= 5)
                {
                    kraxbot.SendChatRoomMessage(chatRoomID, $"{userName}, please fix your connection");

                    if (settings.DcKick == ESpamAction.Kick)
                    {
                        kraxbot.SendKraxMessage($"Kicked {userName} due to disconnecting in {settings.ChatName}");
                        kraxbot.KickUser(chatRoomID, userID);
                    }
                    else if (settings.DcKick == ESpamAction.Warn)
                    {
                        // TODO: This could probably just be a method
                        // TODO: We also set .Last in dashe3, why?
                        user.Warnings++;

                        if (user.Warnings == 1)
                        {
                            kraxbot.SendChatRoomMessage(chatRoomID, "This is your first warning");
                        }
                        else if (user.Warnings > 2)
                        {
                            kraxbot.SendChatRoomMessage(chatRoomID, rng.Next(10) == 0 ? "That's it >:c" : "Your own fault :/");
                            user.Warnings = 0;
                            kraxbot.KickUser(chatRoomID, userID);
                        }
                        else
                        {
                            kraxbot.SendChatRoomMessage(chatRoomID, $"You currently have {user.Warnings} warnings");
                        }
                    }

                    user.Disconnects = 0;
                }
            }

            // Log state message
            Kraxbot.Log($"[C] [{settings.ChatName}] {message} {userName}");

            /*
             * TODO
             * We used to have a bot check here in dashe3,
             * but since all those bots have died (xD),
             * I don't think we need the check anymore
             */

            // Check if inviter left
            if (userID == settings.InvitedID && settings.AutoLeave && state == EChatMemberStateChange.Left)
            {
                kraxbot.SendChatRoomMessage(chatRoomID, "Cya!");
                kraxbot.SendKraxMessage($"Left {settings.ChatName} because {userName} left the chat");
                kraxbot.LeaveChat(chatRoomID);
            }
        }