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; } }
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); } } } }
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) ); }
/// <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); } }
public void OnChatLeave(SteamFriends.ChatMemberInfoCallback callback) { if (ChatLeaveCallback != null) { try { ChatLeaveCallback(callback); } catch (Exception e) { ModuleManager.PrintStackFrame(e); } } }
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); } } }
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); } } }
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)) ); } }
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; } } }
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); } }