public override void Load(bool startup) { OnPlayerConnectEvent.Register(ConnectHandler.HandleConnect, Priority.Critical); OnPlayerCommandEvent.Register(ChatHandler.HandleCommand, Priority.Critical); OnChatEvent.Register(ChatHandler.HandleOnChat, Priority.Critical); OnPlayerStartConnectingEvent.Register(ConnectingHandler.HandleConnecting, Priority.Critical); OnSentMapEvent.Register(MiscHandlers.HandleOnMapSent, Priority.Critical); OnPlayerMoveEvent.Register(MiscHandlers.HandlePlayerMove, Priority.Critical); OnPlayerClickEvent.Register(MiscHandlers.HandlePlayerClick, Priority.Critical); OnEcoTransactionEvent.Register(EcoHandlers.HandleEcoTransaction, Priority.Critical); OnModActionEvent.Register(ModActionHandler.HandleModAction, Priority.Critical); clearTask = Server.Background.QueueRepeat(IPThrottler.CleanupTask, null, TimeSpan.FromMinutes(10)); }
public override void Unload(bool shutdown) { OnPlayerConnectEvent.Unregister(ConnectHandler.HandleConnect); OnPlayerCommandEvent.Unregister(ChatHandler.HandleCommand); OnChatEvent.Unregister(ChatHandler.HandleOnChat); OnPlayerStartConnectingEvent.Unregister(ConnectingHandler.HandleConnecting); OnSentMapEvent.Unregister(MiscHandlers.HandleSentMap); OnPlayerMoveEvent.Unregister(MiscHandlers.HandlePlayerMove); OnPlayerClickEvent.Unregister(MiscHandlers.HandlePlayerClick); OnChangedZoneEvent.Unregister(MiscHandlers.HandleChangedZone); OnEcoTransactionEvent.Unregister(EcoHandlers.HandleEcoTransaction); OnModActionEvent.Unregister(ModActionHandler.HandleModAction); Server.Background.Cancel(clearTask); }
/// <summary> Sends a chat message from the given player (e.g. regular player chat or /me) </summary> /// <remarks> Chat messages will increase player's total messages sent in /info, /// and count towards triggering automute for chat spamming </remarks> /// <remarks> Only players not ignoring the given player will see this message. </remarks> public static void MessageChat(ChatScope scope, Player source, string msg, object arg, ChatMessageFilter filter, bool irc = false) { Player[] players = PlayerInfo.Online.Items; ChatMessageFilter scopeFilter = scopeFilters[(int)scope]; bool counted = false; OnChatEvent.Call(scope, source, msg, arg, ref filter, irc); foreach (Player pl in players) { if (Ignoring(pl, source)) { continue; } // Always show message to self too (unless ignoring self) if (pl != source) { if (!scopeFilter(pl, arg)) { continue; } if (filter != null && !filter(pl, arg)) { continue; } if (!counted) { source.TotalMessagesSent++; counted = true; } } else { // don't send PM back to self if (scope == ChatScope.PM) { continue; } } pl.Message(UnescapeMessage(pl, source, msg)); } source.CheckForMessageSpam(); }
private void Client_OnIncorrectLogin(object sender, OnIncorrectLoginArgs e) { OnChatEvent?.Invoke(new TwitchChatEvent(TwitchChatEventType.LogError, e.Exception.ToString())); }
private void Client_OnNoPermissionError(object sender, EventArgs e) { OnChatEvent?.Invoke(new TwitchChatEvent(TwitchChatEventType.LogError, "No Permission Error")); }
private void Client_OnError(object sender, TwitchLib.Communication.Events.OnErrorEventArgs e) { OnChatEvent?.Invoke(new TwitchChatEvent(TwitchChatEventType.LogError, e.Exception.ToString())); }
private void BuildChatMessage(string channel, dynamic data) { Enum.TryParse(data[0].type.ToString().ToUpper(), out ChatEventType type); Enum.TryParse(data[0].roomRole.ToString().ToUpper(), out RoomRole roomRole); #if DEBUG Console.WriteLine(data[0].ToString()); #endif switch (type) { case ChatEventType.MESSAGE: OnChatEvent?.Invoke(new ChatTextMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), data[0].content.ToString(), long.Parse(data[0].subLength.ToString()))); break; case ChatEventType.GIFT: Enum.TryParse(data[0].gift.ToString(), out GiftType giftType); OnChatEvent?.Invoke(new ChatGiftMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), giftType, int.Parse(data[0].amount.ToString()), data[0].message.ToString())); break; case ChatEventType.SUBSCRIPTION: OnChatEvent?.Invoke(new ChatSubscriptionMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), int.Parse(data[0].month.ToString()))); break; case ChatEventType.HOST: OnChatEvent?.Invoke(new ChatHostMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), int.Parse(data[0].viewer.ToString()))); break; case ChatEventType.CHAT_MODE: Enum.TryParse(data[0].mode.ToString(), out ChatMode mode); OnChatEvent?.Invoke(new ChatModeChangeMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), mode)); break; case ChatEventType.BAN: Enum.TryParse(data[0].bannedByRoomRoleToString().ToUpper(), out RoomRole bannedByRoomRole); OnChatEvent?.Invoke(new ChatBanMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, Util.DliveUserObjectToPublicUserData(data[0].bannedBy), bannedByRoomRole)); break; case ChatEventType.MOD: ModeratorStatusChange change = bool.Parse(data[0].add.ToString()) ? ModeratorStatusChange.PROMOTED : ModeratorStatusChange.DEMOTED; OnChatEvent?.Invoke(new ChatModStatusChangeMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), change)); break; case ChatEventType.EMOTE: OnChatEvent?.Invoke(new ChatEmoteMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), data[0].emote.ToString())); break; case ChatEventType.TIMEOUT: Enum.TryParse(data[0].bannedByRoomRoleToString().ToUpper(), out RoomRole timedoutByRoomRole); OnChatEvent?.Invoke(new ChatTimeoutMessage(channel, data[0].id.ToString(), int.Parse(data[0].minute.ToString()), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, Util.DliveUserObjectToPublicUserData(data[0].bannedBy), timedoutByRoomRole)); break; case ChatEventType.CLIP: OnChatEvent?.Invoke(new ChatClipMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), new Uri($"https://dlive.tv/clip/{data[0].url.ToString()}"))); break; case ChatEventType.GIFTSUB: if (!int.TryParse(data[0].count.ToString(), out int months)) { months = 1; } OnChatEvent?.Invoke(new ChatGiftSubscriptionMessage(channel, data[0].id.ToString(), months, Util.DliveUserObjectToPublicUserData(data[0].sender), PublicQuery.GetPublicInfoByDisplayName(data[0].receiver.ToString()), roomRole)); break; default: dynamic user = data[0].sender; OnChatEvent?.Invoke(user != null ? new UserChatMessage(type, channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(user), roomRole, bool.Parse(data[0].subscribing.ToString())) : new ChatMessage(type, channel, data[0].id.ToString())); break; } }
/// <summary> /// Signals a chat event to all listeners. (usually a UI) /// </summary> /// <param name="info">The chat event to pass along.</param> public void SignalChatEvent(VMChatEvent evt) { OnChatEvent?.Invoke(evt); }