diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2013-03-21 23:42:15 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2013-03-21 23:42:15 +0800 |
commit | 7cccbe1b6547dea2724408ec1a664548ff8405c7 (patch) | |
tree | 0d0b50d33ccebe95b7d8488fba5724f093ce783c | |
parent | 8b42fba13e13c61edbc9b80327f33aecd90d66ea (diff) | |
download | pttbbs-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.c | 10 | ||||
-rw-r--r-- | pttbbs/mbbsd/angel.c | 39 |
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; |