Ejemplo n.º 1
0
        private static void DeletePendingTicket(Session Session, ClientMessage Message)
        {
            ModerationTicket OldTicket = GetPendingTicketForUser(Session.CharacterId);

            if (OldTicket == null)
            {
                return;
            }

            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
            {
                OldTicket.UpdateStatus(MySqlClient, ModerationTicketStatus.DeletedByUser);
            }

            SendDataToAllModerators(ModerationTicketComposer.Compose(OldTicket));
            Session.SendData(HelpCfhDeletedOkComposer.Compose());
        }
Ejemplo n.º 2
0
        private static void CloseTicket(Session Session, ClientMessage Message)
        {
            if (!Session.HasRight("moderation_tickets"))
            {
                return;
            }

            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
            {
                int ResultCode = Message.PopWiredInt32();
                int Unknown1   = Message.PopWiredInt32();

                lock (mSyncRoot)
                {
                    ModerationTicket Ticket = GetTicket(Message.PopWiredUInt32());

                    if (Ticket == null || Ticket.Status != ModerationTicketStatus.Assigned ||
                        Ticket.ModeratorUserId != Session.CharacterId)
                    {
                        return;
                    }

                    ModerationTicketStatus ResultStatus = ModerationTicketStatus.Resolved;
                    Session TargetSession = SessionManager.GetSessionByCharacterId(Ticket.ReporteeUserId);

                    switch (ResultCode)
                    {
                    case 1:

                        ResultStatus = ModerationTicketStatus.ClosedInvalid;
                        break;

                    case 2:

                        ResultStatus = ModerationTicketStatus.ClosedAbusive;
                        break;
                    }

                    Ticket.UpdateStatus(MySqlClient, ResultStatus);

                    SendDataToAllModerators(ModerationTicketComposer.Compose(Ticket));

                    if (TargetSession != null && !Ticket.ModeratorResponded)
                    {
                        TargetSession.SendData(HelpCfhClosedResultComposer.Compose(ResultCode));
                    }

                    if (ResultStatus == ModerationTicketStatus.ClosedAbusive)
                    {
                        CharacterInfo TargetInfo = TargetSession == null?CharacterInfoLoader.GetCharacterInfo(MySqlClient,
                                                                                                              Ticket.ReporteeUserId) : TargetSession.CharacterInfo;

                        if (TargetInfo != null)
                        {
                            TargetInfo.ModerationTicketsCooldownSeconds = 600;
                            TargetInfo.ModerationTicketsAbusive++;

                            // Sync our new statistics manually if this will not happen by session closure
                            if (TargetSession == null)
                            {
                                TargetInfo.SynchronizeStatistics(MySqlClient);
                            }
                        }
                    }
                }
            }
        }