summaryrefslogtreecommitdiffstats
path: root/mbbsd
diff options
context:
space:
mode:
authorwens <wens@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-03-09 00:18:04 +0800
committerwens <wens@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-03-09 00:18:04 +0800
commit085c9a93cf63c5511f28005deb06f8ba25c8b667 (patch)
tree2552708384e0221efed674c44ff03c83a4a54346 /mbbsd
parent8e81df07a3e3ea7abc2159e9ebb5bef6b9caf68a (diff)
downloadpttbbs-085c9a93cf63c5511f28005deb06f8ba25c8b667.tar
pttbbs-085c9a93cf63c5511f28005deb06f8ba25c8b667.tar.gz
pttbbs-085c9a93cf63c5511f28005deb06f8ba25c8b667.tar.bz2
pttbbs-085c9a93cf63c5511f28005deb06f8ba25c8b667.tar.lz
pttbbs-085c9a93cf63c5511f28005deb06f8ba25c8b667.tar.xz
pttbbs-085c9a93cf63c5511f28005deb06f8ba25c8b667.tar.zst
pttbbs-085c9a93cf63c5511f28005deb06f8ba25c8b667.zip
add "cool down" feature for boards.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2582 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd')
-rw-r--r--mbbsd/bbs.c63
-rw-r--r--mbbsd/board.c23
-rw-r--r--mbbsd/cache.c9
-rw-r--r--mbbsd/mail.c13
4 files changed, 108 insertions, 0 deletions
diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c
index d8da50b0..43d6e2aa 100644
--- a/mbbsd/bbs.c
+++ b/mbbsd/bbs.c
@@ -551,6 +551,15 @@ do_general(int isbid)
vmsg("你不夠資深喔!");
return FULLUPDATE;
}
+
+#ifdef USE_COOLDOWN
+ if ( !((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP)) &&
+ ((currbrdattr & BRD_COOLDOWN) && now < cooldowntimeof(usernum)) ) {
+ move(5, 10);
+ vmsg("冷靜一下吧!");
+ return FULLUPDATE;
+ }
+#endif
#endif
#ifdef NO_WATER_POST
@@ -767,6 +776,10 @@ do_general(int isbid)
}
if (currbrdattr & BRD_ANONYMOUS)
do_crosspost("UnAnonymous", &postfile, fpath);
+#ifdef USE_COOLDOWN
+ if (currbrdattr & BRD_COOLDOWN)
+ add_cooldowntime(usernum, 5);
+#endif
}
pressanykey();
return FULLUPDATE;
@@ -1042,6 +1055,15 @@ cross_post(int ent, fileheader_t * fhdr, char *direct)
return FULLUPDATE;
}
+#ifdef USE_COOLDOWN
+ if ( !((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP)) &&
+ ((bcache[author - 1].brdattr & BRD_COOLDOWN) && now < cooldowntimeof(usernum)) ) {
+ move(5, 10);
+ vmsg("冷靜一下吧!");
+ return FULLUPDATE;
+ }
+#endif
+
ent = 1;
author = 0;
if (HAS_PERM(PERM_SYSOP) || !strcmp(fhdr->owner, cuser.userid)) {
@@ -1103,6 +1125,10 @@ cross_post(int ent, fileheader_t * fhdr, char *direct)
bp = getbcache(getbnum(xboard));
if (!xfile.filemode && !(bp->brdattr & BRD_NOTRAN))
outgo_post(&xfile, xboard, cuser.userid, cuser.username);
+#ifdef USE_COOLDOWN
+ if (bp->brdattr & BRD_COOLDOWN)
+ add_cooldowntime(usernum, 5);
+#endif
setbtotal(getbnum(xboard));
cuser.numposts++;
UPDATE_USEREC;
@@ -1951,6 +1977,10 @@ del_post(int ent, fileheader_t * fhdr, char *direct)
if (not_owned && tusernum && fhdr->multi.money > 0 &&
strcmp(currboard, "Test")) {
deumoney(tusernum, -fhdr->multi.money);
+#ifdef USE_COOLDOWN
+ if (bp->brdattr & BRD_COOLDOWN)
+ add_cooldowntime(tusernum, 15);
+#endif
}
if (!not_owned && strcmp(currboard, "Test")) {
if (cuser.numposts)
@@ -2560,6 +2590,35 @@ change_restrictedpost(int ent, fileheader_t * fhdr, char *direct){
return FULLUPDATE;
}
+#ifdef USE_COOLDOWN
+/**
+ * 設定看板冷靜功能, 限制使用者發文時間
+ */
+static int
+change_cooldown(int ent, fileheader_t * fhdr, char *direct)
+{
+ boardheader_t *bp = getbcache(currbid);
+
+ if (!HAS_PERM(PERM_SYSOP))
+ return DONOTHING;
+
+ if (bp->brdattr & BRD_COOLDOWN) {
+ if (getans("目前降溫中, 要開放嗎(y/N)?") != 'y')
+ return FULLUPDATE;
+ bp->brdattr &= ~BRD_COOLDOWN;
+ outs("大家都可以 post 文章了。\n");
+ } else {
+ if (getans("要限制 post 頻率, 降溫嗎(y/N)?") != 'y')
+ return FULLUPDATE;
+ bp->brdattr |= BRD_COOLDOWN;
+ outs("開始冷靜。\n");
+ }
+ substitute_record(fn_board, bp, sizeof(boardheader_t), currbid);
+ pressanykey();
+ return FULLUPDATE;
+}
+#endif
+
/* ----------------------------------------------------- */
/* 看板功能表 */
/* ----------------------------------------------------- */
@@ -2567,7 +2626,11 @@ change_restrictedpost(int ent, fileheader_t * fhdr, char *direct){
const onekey_t read_comms[] = {
show_filename, // Ctrl('A')
NULL, // Ctrl('B')
+#ifdef USE_COOLDOWN
+ change_cooldown, // Ctrl('C')
+#else
NULL, // Ctrl('C')
+#endif
NULL, // Ctrl('D')
change_restrictedpost, // Ctrl('E')
NULL, // Ctrl('F')
diff --git a/mbbsd/board.c b/mbbsd/board.c
index 3fb53483..ff3fb610 100644
--- a/mbbsd/board.c
+++ b/mbbsd/board.c
@@ -192,6 +192,23 @@ addnewbrdstat(int n, int state)
static int
cmpboardfriends(const void *brd, const void *tmp)
{
+#ifdef USE_COOLDOWN
+ if ((B_BH((boardstat_t*)tmp)->brdattr & BRD_COOLDOWN) &&
+ (B_BH((boardstat_t*)brd)->brdattr & BRD_COOLDOWN))
+ return 0;
+ else if ( B_BH((boardstat_t*)tmp)->brdattr & BRD_COOLDOWN ) {
+ if (B_BH((boardstat_t*)brd)->nuser == 0)
+ return 0;
+ else
+ return 1;
+ }
+ else if ( B_BH((boardstat_t*)brd)->brdattr & BRD_COOLDOWN ) {
+ if (B_BH((boardstat_t*)tmp)->nuser == 0)
+ return 0;
+ else
+ return -1;
+ }
+#endif
return ((B_BH((boardstat_t*)tmp)->nuser) -
(B_BH((boardstat_t*)brd)->nuser));
}
@@ -543,7 +560,13 @@ show_brdlist(int head, int clsflag, int newflag)
B_BH(ptr)->title[3] + B_BH(ptr)->title[0]) & 07],
B_BH(ptr)->title, B_BH(ptr)->title + 5, B_BH(ptr)->title + 7);
+#ifdef USE_COOLDOWN
+ if (B_BH(ptr)->brdattr & BRD_COOLDOWN)
+ outs("靜 ");
+ else if (B_BH(ptr)->brdattr & BRD_BAD)
+#else
if (B_BH(ptr)->brdattr & BRD_BAD)
+#endif
outs(" X ");
else if (B_BH(ptr)->nuser >= 5000)
outs("\033[1;34m爆!\033[m");
diff --git a/mbbsd/cache.c b/mbbsd/cache.c
index 4933339f..d32d7f15 100644
--- a/mbbsd/cache.c
+++ b/mbbsd/cache.c
@@ -1031,3 +1031,12 @@ hbflcheck(int bid, int uid)
}
return 1;
}
+
+#ifdef USE_COOLDOWN
+void add_cooldowntime(int uid, int min)
+{
+ time4_t new = now + 60 * min;
+ time4_t old = SHM->cooldowntime[uid - 1];
+ SHM->cooldowntime[uid - 1] = new > old ? new : old;
+}
+#endif
diff --git a/mbbsd/mail.c b/mbbsd/mail.c
index 5d4ba3b3..7d953388 100644
--- a/mbbsd/mail.c
+++ b/mbbsd/mail.c
@@ -1053,6 +1053,15 @@ mail_cross_post(int ent, fileheader_t * fhdr, char *direct)
return FULLUPDATE;
}
+#ifdef USE_COOLDOWN
+ if ( !((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP)) &&
+ ((bcache[ent - 1].brdattr & BRD_COOLDOWN) && now < cooldowntimeof(usernum)) ) {
+ move(5, 10);
+ vmsg("冷靜一下吧!");
+ return FULLUPDATE;
+ }
+#endif
+
ent = 1;
if (HAS_PERM(PERM_SYSOP) || !strcmp(fhdr->owner, cuser.userid)) {
getdata(2, 0, "(1)原文轉載 (2)舊轉錄格式?[1] ",
@@ -1117,6 +1126,10 @@ mail_cross_post(int ent, fileheader_t * fhdr, char *direct)
setbtotal(getbnum(xboard));
if (!xfile.filemode)
outgo_post(&xfile, xboard, cuser.userid, cuser.username);
+#ifdef USE_COOLDOWN
+ if (bcache[getbnum(xboard) - 1].brdattr & BRD_COOLDOWN)
+ add_cooldowntime(usernum, 5);
+#endif
cuser.numposts++;
vmsg("文章轉錄完成");
currmode = currmode0;