summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2013-03-21 23:42:15 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2013-03-21 23:42:15 +0800
commit7cccbe1b6547dea2724408ec1a664548ff8405c7 (patch)
tree0d0b50d33ccebe95b7d8488fba5724f093ce783c
parent8b42fba13e13c61edbc9b80327f33aecd90d66ea (diff)
downloadpttbbs-7cccbe1b6547dea2724408ec1a664548ff8405c7.tar
pttbbs-7cccbe1b6547dea2724408ec1a664548ff8405c7.tar.gz
pttbbs-7cccbe1b6547dea2724408ec1a664548ff8405c7.tar.bz2
pttbbs-7cccbe1b6547dea2724408ec1a664548ff8405c7.tar.lz
pttbbs-7cccbe1b6547dea2724408ec1a664548ff8405c7.tar.xz
pttbbs-7cccbe1b6547dea2724408ec1a664548ff8405c7.tar.zst
pttbbs-7cccbe1b6547dea2724408ec1a664548ff8405c7.zip
After probation rule is enabled, from log we see lots of people start flooding
with "changing angel" again by re-login, so let's apply the change-angel-check across login sessions. Also updated probation calculation and add penalty for bad masters. git-svn-id: http://opensvn.csie.org/pttbbs/trunk@5815 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--pttbbs/daemon/angelbeats/angelbeats.c10
-rw-r--r--pttbbs/mbbsd/angel.c39
2 files changed, 27 insertions, 22 deletions
diff --git a/pttbbs/daemon/angelbeats/angelbeats.c b/pttbbs/daemon/angelbeats/angelbeats.c
index 9bd38b77..4cf7c657 100644
--- a/pttbbs/daemon/angelbeats/angelbeats.c
+++ b/pttbbs/daemon/angelbeats/angelbeats.c
@@ -148,9 +148,11 @@ int angel_list_comp_advanced(const void *pva, const void *pvb) {
time_t now = time(0),
assign_a = pa->last_assigned, assign_b = pb->last_assigned;
- if (now - assign_a >= ANGELBEATS_ASSIGN_PROBATION_PERIOD)
+ if (now - assign_a >= ANGELBEATS_ASSIGN_PROBATION_PERIOD ||
+ pa->last_activity >= assign_a)
assign_a -= assign_a % ANGELBEATS_REASSIGN_PERIOD;
- if (now - assign_b >= ANGELBEATS_ASSIGN_PROBATION_PERIOD)
+ if (now - assign_b >= ANGELBEATS_ASSIGN_PROBATION_PERIOD ||
+ pb->last_activity >= assign_b)
assign_b -= assign_b % ANGELBEATS_REASSIGN_PERIOD;
if (assign_a != assign_b)
@@ -316,7 +318,9 @@ suggest_online_angel(int master_uid) {
(int)(clk - kanade->last_activity),
(int)(clk - kanade->last_assigned),
((int)(clk - kanade->last_assigned) <
- ANGELBEATS_ASSIGN_PROBATION_PERIOD) ? "[probation]" : "");
+ ANGELBEATS_ASSIGN_PROBATION_PERIOD &&
+ kanade->last_activity < kanade->last_assigned) ?
+ "[probation]" : "");
#endif
#if defined(ANGELBEATS_ASSIGN_BY_LAST_ACTIVITY)
diff --git a/pttbbs/mbbsd/angel.c b/pttbbs/mbbsd/angel.c
index a68f6197..ed1732a5 100644
--- a/pttbbs/mbbsd/angel.c
+++ b/pttbbs/mbbsd/angel.c
@@ -319,8 +319,8 @@ select_angel() {
static int
do_changeangel(int force) {
char buf[4];
- static time_t last_time = 0;
const char *prompt = "祅癘ЧΘΩ㊣穦眖絬ぱㄏい匡穝ぱㄏ";
+ static int is_bad_master = -1;
/* cuser.myangel == "-" means banned for calling angel */
if (cuser.myangel[0] == '-')
@@ -336,27 +336,29 @@ do_changeangel(int force) {
return 0;
}
-#ifdef ANGEL_CHANGE_TIMELIMIT_MINS
- if (force || HasUserPerm(PERM_ADMIN))
- last_time = 0;
-
- if (last_time &&
- (now - last_time < ANGEL_CHANGE_TIMELIMIT_MINS * 60)) {
- vmsgf("–Ω传ぱㄏ程ぶ丁筳 %d だ牧",
- ANGEL_CHANGE_TIMELIMIT_MINS);
- return 0;
+ // get/cache "bad_master" info
+ if (is_bad_master < 0) {
+ char bad_master_file[PATHLEN];
+ setuserfile(bad_master_file, ".bad_master");
+ is_bad_master = dashf(bad_master_file);
}
-#endif
+
+#ifdef ANGEL_CHANGE_TIMELIMIT_MINS
+ if (!(force || HasUserPerm(PERM_ADMIN)))
{
- static int is_bad_master = -1;
- if (is_bad_master < 0) {
- char bad_master_file[PATHLEN];
- setuserfile(bad_master_file, ".bad_master");
- is_bad_master = dashf(bad_master_file);
- }
- if (is_bad_master && !verify_captcha("磷秖獶タ盽传ぱㄏ\n"))
+ int duration = ANGEL_CHANGE_TIMELIMIT_MINS;
+ if (is_bad_master)
+ duration *= 3;
+ if (cuser.timesetangel &&
+ (now - cuser.timesetangel < duration * 60)) {
+ vmsgf("–Ω传ぱㄏ程ぶ丁筳 %d だ牧", duration);
return 0;
+ }
}
+#endif
+
+ if (is_bad_master && !verify_captcha("磷秖獶タ盽传ぱㄏ\n"))
+ return 0;
getdata(b_lines - 1, 0, "絋﹚璶传ぱㄏ [y/N]", buf, 3, LCECHO);
if (buf[0] == 'y') {
@@ -366,7 +368,6 @@ do_changeangel(int force) {
angel_beats_do_request(ANGELBEATS_REQ_REMOVE_LINK,
usernum, searchuser(cuser.myangel, NULL));
pwcuSetMyAngel("");
- last_time = now;
vmsg(prompt);
}
return 0;