Skip to content

Commit

Permalink
Merge pull request #15 from NfoAlex/ModLog
Browse files Browse the repository at this point in the history
Mod log
  • Loading branch information
NfoAlex committed Jun 9, 2023
2 parents 1ca1ec4 + ec878a3 commit 507d3e2
Show file tree
Hide file tree
Showing 4 changed files with 311 additions and 8 deletions.
29 changes: 25 additions & 4 deletions Message.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
//msg_server.js
//メッセージ関連

const fs = require('fs'); //履歴書き込んだり読み込むために
const { getLinkPreview } = require("link-preview-js");
const indexjs = require("./index.js");
const infoUpdate = require("./infoUpdate.js");

//URLプレビュー時のリダイレクト用URLのブロック対象にならないリスト
const knownRedirectUrls = [
Expand Down Expand Up @@ -125,11 +125,11 @@ let msgMix = function msgMix(m) {

}

//返信をしているなら
try {
//もし返信なら
//データに返信先の文章を追加
if ( m.replyData.isReplying ) {
let msg = getMessage(m.channelid, m.replyData.messageid);
console.log("Message :: msgMix : 返信だね", msg);
m.replyData.content = msg.content;
m.replyData.userid = msg.userid;

Expand Down Expand Up @@ -422,12 +422,32 @@ let msgDelete = function msgDelete(dat) {
return -1;
}

//送信者と削除する人が同じじゃなければ監査ログへ書き込む
if ( dat.reqSender.userid !== dataHistory[dat.messageid].userid ) {
//記録処理
infoUpdate.recordModeration(
dat.reqSender.userid,
{
type: "message",
userid: dataHistory[dat.messageid].userid,
channelid: dataHistory[dat.messageid].channelid,
messageid: dat.messageid
},
{
actionname: "messageDelete",
valueBefore: "",
valueAfter: ""
}
);

}

//削除!
delete dataHistory[dat.messageid];

//書き込み
fs.writeFileSync(pathOfJson, JSON.stringify(dataHistory, null, 4));

//返す結果用に履歴を取得
//let result = msgRecordCall(dat.channelid, 10);
let result = {
Expand Down Expand Up @@ -612,6 +632,7 @@ let msgRecordCallNew = async function msgRecordCall(cid, readLength, startLength
let dirOfJson = "./record/" + cid;
let readCount = 0;

//startLengthが空なら最初から読むように
if ( startLength === undefined ) { startLength = 0; }

try {
Expand Down
84 changes: 82 additions & 2 deletions dbControl.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,6 @@ try { //読み込んでみる
dataServer = JSON.parse(fs.readFileSync('./server.json', 'utf-8')); //サーバー情報のJSON読み込み
}

//let dataRole = JSON.parse(fs.readFileSync('./role.json', 'utf-8')); //ロールのJSON読み込み

//起動したときに全員をオフライン状態にする
for ( let index in Object.keys(dataUser.user) ) {
let userid = Object.keys(dataUser.user)[index]; //ユーザーIDを取得
Expand Down Expand Up @@ -505,6 +503,87 @@ let getUserSave = function getUserSave(dat) {

}

//監査ログの取得
let getModlog = async function getModlog(dat) {
//JSONファイル一覧を格納する変数
let ListOfJson = [];

//JSONファイルの一覧を取得
try {
ListOfJson = await new Promise((resolve) => { //取得が完了するまで処理を待つ
//読み込み
fs.readdir("./modlog/", (err, files) => {
ListOfJson = files; //ファイルの名前取得
resolve(); //処理を終了、次の処理へ

});

}).then(() => {
//追加された順だと古い順なので
return ListOfJson.reverse();

});
} catch(e) { //一覧がとれなかったら失敗と返す
return -1;
}

//データを確認した回数
let dataCheckedCount = 0;
//取り出したデータの個数(デフォルトで1回に10個まで取り出すようにする)
let dataSavedCount = 0;

//送信する監査ログデータ
let dataModlogResult = {
endOfData: false,
data: []
};

//それぞれのJSONファイルからデータを取得して配列に追加
for ( let jsonIndex in ListOfJson) {
//監査ログを取り出し
let dataModlog = JSON.parse(fs.readFileSync("./modlog/"+ListOfJson[jsonIndex]));

//JSONの長さ
let jsonLength = Object.keys(dataModlog).length;

//JSONのデータの長さ文ループして送信するデータ配列へ追加
for ( let itemIndex=0; itemIndex<jsonLength; itemIndex++ ) {
//データ個数が10個あるなら切る
if ( dataSavedCount>=10 ) break;

//もしデータ取得位置がデータ確認回数と同じならデータの追加をする
if ( dataCheckedCount >= dat.startLength ) {

//追加
dataModlogResult.data.push(
Object.entries(dataModlog)[itemIndex][1]
);

//データ個数をカウント
dataSavedCount++;

}

//データ確認回数をカウント
dataCheckedCount++;

}

//次のJSON読み込む前に念のため確認
if ( dataSavedCount>=10 ) break;

}

//もしデータ個数が最終的に10個未満ならこれでデータ全部ということを設定
if ( dataSavedCount<10 ) dataModlogResult.endOfData=true;

//上から新しい順に出すために逆順番にして返す
dataModlogResult.data = dataModlogResult.data.reverse();
return dataModlogResult;


}

//サーバーの設定情報を取得
let getServerSettings = function getServerSettings(dat) {
let sendersInfo = getInfoUser({
Expand Down Expand Up @@ -542,6 +621,7 @@ exports.getInfoChannelJoinedUserList = getInfoChannelJoinedUserList; //チャン
exports.getInfoList = getInfoList; //チャンネルリストの取得
exports.searchUserDynamic = searchUserDynamic; //ユーザーを検索する関数
exports.getUserSave = getUserSave; //ユーザーの個人データ(設定や既読状態)を取得
exports.getModlog = getModlog; //監査ログを取得
exports.getServerSettings = getServerSettings; //サーバーの詳細設定を取得
exports.getInitInfo = getInitInfo; //サーバーの初期情報

Expand Down
28 changes: 27 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const e = require("express");

const port = process.env.PORT || 33333;

const SERVER_VERSION = "alpha_20230607";
const SERVER_VERSION = "alpha_20230609";

const app = express();
const server = http.createServer(app);
Expand Down Expand Up @@ -47,6 +47,7 @@ try{fs.mkdirSync("./files/");}catch(e){}
try{fs.mkdirSync("./usersave/")}catch(e){}
try{fs.mkdirSync("./record/");}catch(e){}
try{fs.mkdirSync("./img/");}catch(e){}
try{fs.mkdirSync("./modlog/");}catch(e){}

//もしバックエンドに直接アクセスされたら用
app.get('/', (req, res) => {
Expand Down Expand Up @@ -1205,6 +1206,31 @@ io.on("connection", (socket) => {

});

//監査ログの取得
socket.on("getModlog", async (dat) => {
/*
dat
{
startLength: 0, //メッセージの取得開始位置
reqSender: {
...
}
}
*/

//パケットの整合性確認
if ( !checkDataIntegrality(dat, ["startLength"], "getModlog") ) return -1;

//監査ログ取得(getModlog関数は時間がかかるためasyncにしているのでawait)
let modLog = await db.getModlog(dat);

console.log("index :: getModlog : modLog->", modLog);

//送信
socket.emit("infoModlog", modLog);

});

//サーバー設定の取得
socket.on("getServerSettings", (dat) => {
/*
Expand Down
Loading

0 comments on commit 507d3e2

Please sign in to comment.