/// <summary> /// Alters the state of the forum thread. /// </summary> internal void AlterForumThreadState() { uint groupId = Request.GetUInteger(); uint threadId = Request.GetUInteger(); int stateToSet = Request.GetInteger(); using (IQueryAdapter dbClient = Yupi.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery( $"SELECT * FROM groups_forums_posts WHERE group_id = '{groupId}' AND id = '{threadId}' LIMIT 1;"); DataRow row = dbClient.GetRow(); Group theGroup = Yupi.GetGame().GetGroupManager().GetGroup(groupId); if (row != null) { if ((uint) row["poster_id"] == Session.GetHabbo().Id || theGroup.Admins.ContainsKey(Session.GetHabbo().Id)) { dbClient.SetQuery($"UPDATE groups_forums_posts SET hidden = @hid WHERE id = {threadId};"); dbClient.AddParameter("hid", stateToSet == 20 ? "1" : "0"); dbClient.RunQuery(); } } GroupForumPost thread = new GroupForumPost(row); ServerMessage notif = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer")); notif.AppendString(stateToSet == 20 ? "forums.thread.hidden" : "forums.thread.restored"); notif.AppendInteger(0); Session.SendMessage(notif); if (thread.ParentId != 0) return; ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("GroupForumThreadUpdateMessageComposer")); message.AppendInteger(groupId); message.AppendInteger(thread.Id); message.AppendInteger(thread.PosterId); message.AppendString(thread.PosterName); message.AppendString(thread.Subject); message.AppendBool(thread.Pinned); message.AppendBool(thread.Locked); message.AppendInteger(Yupi.GetUnixTimeStamp() - thread.Timestamp); message.AppendInteger(thread.MessageCount + 1); message.AppendInteger(0); message.AppendInteger(0); message.AppendInteger(0); message.AppendString(string.Empty); message.AppendInteger(Yupi.GetUnixTimeStamp() - thread.Timestamp); message.AppendByte(stateToSet); message.AppendInteger(0); message.AppendString(thread.Hider); message.AppendInteger(0); Session.SendMessage(message); } }
/// <summary> /// Reads the forum thread. /// </summary> internal void ReadForumThread() { uint groupId = Request.GetUInteger(); uint threadId = Request.GetUInteger(); int startIndex = Request.GetInteger(); Request.GetInteger(); Group theGroup = Yupi.GetGame().GetGroupManager().GetGroup(groupId); if (theGroup == null || theGroup.Forum.Id == 0) return; using (IQueryAdapter dbClient = Yupi.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery( $"SELECT * FROM groups_forums_posts WHERE group_id = '{groupId}' AND parent_id = '{threadId}' OR id = '{threadId}' ORDER BY timestamp ASC;"); DataTable table = dbClient.GetTable(); if (table == null) return; int b = table.Rows.Count <= 20 ? table.Rows.Count : 20; List<GroupForumPost> posts = new List<GroupForumPost>(); int i = 1; while (i <= b) { DataRow row = table.Rows[i - 1]; if (row == null) { b--; continue; } GroupForumPost thread = new GroupForumPost(row); if (thread.ParentId == 0 && thread.Hidden) return; posts.Add(thread); i++; } ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("GroupForumReadThreadMessageComposer")); message.AppendInteger(groupId); message.AppendInteger(threadId); message.AppendInteger(startIndex); message.AppendInteger(b); int indx = 0; foreach (GroupForumPost post in posts) { message.AppendInteger(indx++ - 1); message.AppendInteger(indx - 1); message.AppendInteger(post.PosterId); message.AppendString(post.PosterName); message.AppendString(post.PosterLook); message.AppendInteger(Yupi.GetUnixTimeStamp() - post.Timestamp); message.AppendString(post.PostContent); message.AppendByte(0); message.AppendInteger(0); message.AppendString(post.Hider); message.AppendInteger(0); message.AppendInteger(0); } Session.SendMessage(message); } }
/// <summary> /// Publishes the forum thread. /// </summary> internal void PublishForumThread() { if (Yupi.GetUnixTimeStamp() - Session.GetHabbo().LastSqlQuery < 20) return; uint groupId = Request.GetUInteger(); uint threadId = Request.GetUInteger(); string subject = Request.GetString(); string content = Request.GetString(); Group group = Yupi.GetGame().GetGroupManager().GetGroup(groupId); if (group == null || group.Forum.Id == 0) return; int timestamp = Yupi.GetUnixTimeStamp(); using (IQueryAdapter dbClient = Yupi.GetDatabaseManager().GetQueryReactor()) { if (threadId != 0) { dbClient.SetQuery($"SELECT * FROM groups_forums_posts WHERE id = {threadId}"); DataRow row = dbClient.GetRow(); GroupForumPost post = new GroupForumPost(row); if (post.Locked || post.Hidden) { Session.SendNotif(Yupi.GetLanguage().GetVar("forums_cancel")); return; } } Session.GetHabbo().LastSqlQuery = Yupi.GetUnixTimeStamp(); dbClient.SetQuery( "INSERT INTO groups_forums_posts (group_id, parent_id, timestamp, poster_id, poster_name, poster_look, subject, post_content) VALUES (@gid, @pard, @ts, @pid, @pnm, @plk, @subjc, @content)"); dbClient.AddParameter("gid", groupId); dbClient.AddParameter("pard", threadId); dbClient.AddParameter("ts", timestamp); dbClient.AddParameter("pid", Session.GetHabbo().Id); dbClient.AddParameter("pnm", Session.GetHabbo().UserName); dbClient.AddParameter("plk", Session.GetHabbo().Look); dbClient.AddParameter("subjc", subject); dbClient.AddParameter("content", content); threadId = dbClient.GetUInteger(); } group.Forum.ForumScore += 0.25; group.Forum.ForumLastPosterName = Session.GetHabbo().UserName; group.Forum.ForumLastPosterId = Session.GetHabbo().Id; group.Forum.ForumLastPosterTimestamp = (uint) timestamp; group.Forum.ForumMessagesCount++; group.UpdateForum(); if (threadId == 0) { ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("GroupForumNewThreadMessageComposer")); message.AppendInteger(groupId); message.AppendInteger(threadId); message.AppendInteger(Session.GetHabbo().Id); message.AppendString(subject); message.AppendString(content); message.AppendBool(false); message.AppendBool(false); message.AppendInteger(Yupi.GetUnixTimeStamp() - timestamp); message.AppendInteger(1); message.AppendInteger(0); message.AppendInteger(0); message.AppendInteger(1); message.AppendString(string.Empty); message.AppendInteger(Yupi.GetUnixTimeStamp() - timestamp); message.AppendByte(1); message.AppendInteger(1); message.AppendString(string.Empty); message.AppendInteger(42); Session.SendMessage(message); } else { ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("GroupForumNewResponseMessageComposer")); message.AppendInteger(groupId); message.AppendInteger(threadId); message.AppendInteger(group.Forum.ForumMessagesCount); message.AppendInteger(0); message.AppendInteger(Session.GetHabbo().Id); message.AppendString(Session.GetHabbo().UserName); message.AppendString(Session.GetHabbo().Look); message.AppendInteger(Yupi.GetUnixTimeStamp() - timestamp); message.AppendString(content); message.AppendByte(0); message.AppendInteger(0); message.AppendString(string.Empty); message.AppendInteger(0); Session.SendMessage(message); } }