可以到饮水思源看看, 解封触发就前面 fishchen 说的那样. 被封者
到期后本版 post 触发.
设定本板的 [禁止发文] 名单
(A)增加 (R)删除名单 or (E)离开 [E]: a
输入准备加入名单的使用者ID: Roka
输入说明: 封人记录里面, (a) 表示 auto, (n) 表示 noauto
输入封禁时间[缺省为 1 天, 0 为放弃, 手动解封在时间前加'.']:
Altmayer test (n) 2002年05月10日解封
wind test (a) 2002年05月10日解封
修改代码:
================bbs.c================
//1. deny_me( char * bname) 函数里面
-- return seek_in_file(buf, currentuser.userid);
++ return seek_in_denyfile(buf, currentuser.userid);
//2. add function seek_in_denyfile
int
seek_in_denyfile(filename, seekstr)
char filename[STRLEN], seekstr[STRLEN];
{
FILE *fp;
char buf[STRLEN];
char *namep, *date;
char flag;
time_t nowtime;
if ((fp = fopen(filename, "r")) == NULL)
return 0;
while (fgets(buf, STRLEN, fp) != NULL) {
namep = (char *) strtok(buf, ": \n\r\t");
if (namep != NULL && ci_strcmp(namep, seekstr) == 0) {
fclose(fp);
nowtime=time(0);
getdatestring(nowtime,NA);
flag = buf[55];
date = (char *) (buf + 58);
if (flag=='a' && strncmp (datestring,date,14) > 0) {
if ( del_from_file(filename, seekstr)){
char msgbuf[STRLEN];
char repbuf[STRLEN];
sprintf(repbuf, "恢复%s在%s板的%s权限",
seekstr,currboard, "发文");
sprintf(msgbuf, "\n %s 网友:\n\n"
"\t因封禁时间已过,现恢复您在 [%s] 板的『%s』权力。\n\n"
"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tBy %s",
seekstr, currboard,"发表文章",BBSID);
autoreport(repbuf,msgbuf,YEA,seekstr);
return 0;
}
}
return 1;
}
}
fclose(fp);
return 0;
}
=========================bm.c==========================
// 改addtodeny函数, 改过什么地方记不清楚了 :(
int addtodeny(char *uident,char *msg,int ischange, int info_type)
{
char buf[50],strtosave[256],buf2[50];
int flag = 1; //自动解封标志
time_t nowtime;
int day, seek;
#ifndef BOARD_READDENY
info_type = 1;
#endif
seek = SeekInNameList(uident);
if(seek && !ischange){
move(3, 0);
prints(" %s 已经在名单中。", uident);
pressanykey();
return -1;
}
if (ischange && !seek) {
move(3,0);
prints(" %s 不在名单中。", uident);
pressreturn();
return -1;
}
while(1){
getdata(3,0,"输入说明: ", buf,40,DOECHO,YEA);
if(killwordsp(buf)!=0)break;
}
nowtime=time(0);
getdatestring(nowtime,NA);
getdata(4,0,"输入封禁时间[缺省为 1 天, 0 为放弃, 手动解封在时间前加'.']: ",bu
f2,4,DOECHO,YEA);
if(buf2[0]=='\0') day =1;
else if(buf2[0]=='.'){
flag = 0;
day = atoi(buf2+1);
}
else {
flag = 1;
day = atoi(buf2);
}
if(day <= 0) return -1;
if(day >=30) day = 30;
nowtime += day * 86400;
getdatestring(nowtime,NA);
sprintf(strtosave,"%-12s %-40s %s%14.14s解封",uident,buf,flag?"(a) ":"(n) ",d
atestring);
if(!ischange){
if(!flag)sprintf(msg,
"\n %s 网友: \n\n"
"\t我很抱歉地告诉您,您已经被取消在 %s 板的『%s』权力。\n\n"
"\t您被封禁的原因是: [%s]\n\n"
"\t因为您的行为,决定停止您在本板的权利 [%d] 天\n\n"
"\t请您于 [%14.14s] 向 %s 发信申请解封。\n\n",
uident, currboard, info_type==1?"发文":"进入",buf, day,
datestring, currentuser.userid);
else sprintf(msg,
"\n %s 网友: \n\n"
"\t我很抱歉地告诉您,您已经被取消在 %s 板的『%s』权力。\n\n"
"\t您被封禁的原因是: [%s]\n\n"
"\t因为您的行为,决定停止您在本板的权利 [%d] 天\n\n"
"\t [%d] 天后系统自动解封。\n\n"
"\t\t\t\t\t\t\t\t\t\t\t\tBy %s",
uident, currboard, info_type==1?"发文":"进入",buf, day, day, currentuser
.userid);
} else {
if(!flag)sprintf(msg,
"\n %s 网友: \n\n"
"\t关于您在 %s 板被取消『%s』权力问题,现变更如下:\n\n"
"\t封禁的原因: [%s]\n\n"
"\t从现在开始,停止该权利时间: [%d] 天\n\n"
"\t请您于 [%14.14s] 向 %s 发信申请解封。\n\n",
uident, currboard, info_type==1?"发文":"进入",buf, day,
datestring, currentuser.userid);
else sprintf(msg,
"\n %s 网友: \n\n"
"\t关于您在 %s 板被取消『%s』权力问题,现变更如下:\n\n"
"\t封禁的原因: [%s]\n\n"
"\t从现在开始,停止该权利时间: [%d] 天\n\n"
"\t [%d] 天后系统自动解封。\n\n"
"\t\t\t\t\t\t\t\t\t\t\t\tBy %s",
uident, currboard, info_type==1?"发文":"进入",buf, day, day, currentuser
.userid);
}
if(info_type == 2) setbfile( genbuf, currboard,"board.deny" );
else setbfile( genbuf, currboard,"deny_users" );
if (ischange) del_from_file(genbuf, uident);
return add_to_file(genbuf,strtosave);
}
--