资源描述:
《发呆机器人-可以按模式聊天.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、发呆机器人-可以按模式聊天/*****************************说明******************************这个程序是在ylsdd的防止发呆的程序的基础上改的. *****主要功能: *****防止发呆,过一段时间会发出一个Ctl+L; *****能按给定的模式响应聊天信息; *****可以自动回msg; *****把整个上bbs过程写在bbs.log里 *****使用方法: *****把fd.c和bbs.rule放在同一目录下. *****gcc -o fd fd.c ****
2、*fd *****程序是缺省连smth的,如果用于其它bbs要做改动.请看相关注释行. *****bbs.rule的定义方法是每行一个规则. *****&表示空格..是匹配任何字符串的通配符,0,1,2,3,4用来存放匹配的子串. *****例如: *****==>.&把&++&踢的死去活来 /a&一运气,0的腿就折了 *****这句话就是定义了,当有人对聊天id为++的作如下动作: *****==>rika 把 ++ 踢的死去活来 *****那么就返回"/a 一运气,rika的腿就折了" *****"==>"是smth
3、上用的聊天提示符,若用于别的bbs请按实际情形改动. ******************************说明结束********************///fd.c #include #include #include #include #include #include #include #include struct t
4、ermios tsave; int match2(char *mod,char *set,char *answer) { int i,j,k,c,sign; char ar[5][50]; c=0; j=0;k=0; sign=0; for(i=0;mod[i];i++)if(mod[i]=='&')mod[i]=' '; i=0; while(mod[i]) { if(mod[i]!='.') { if(mod[i]!=set[j])return 0; i++;j++; }
5、 else { for(k=j+1;set[k];k++) { if(mod[i+1]==set[k]&&(mod[i+2]==set[k+1]
6、
7、set[k]>0)) { i+=2; strncpy(ar[c],set+j,k-j); ar[c][k-j]=0; j=k+1; c++; break; } } if(!set[k])return 0; } } j=0; for(i=0;
8、answer[i];i++) { if(answer[i]>='0'&&answer[i]<'5') for(k=0;ar[answer[i]-'0'][k];k++)set[j++]=ar[answer[i]-'0'][k]; else { if(answer[i]=='&')set[j++]=' '; else set[j++]=answer[i]; } } set[j]=0; return 1; } int match(char *buf,int *l) { char m
9、od[1024],answer[1024]; FILE *rulefile; int i; for(i=0;buf[i];i++)if(buf[i]==7) { strcpy(buf,"r对不起,现在我不在,若有事请给我写信!"); //可以换成你自己要回的信息. *l=strlen(buf); buf[*l]=13; return 1; } rulefile=fopen("bbs.rule","r"); while(fscanf(rulefile,"%s %s",mod,answe
10、r)==2) { if(match2(mod,buf,answer)) { *l=strlen(buf); buf[*l]=13; fclose(rulefile); return 1; } } fclose(rulefile); return 0; } void scan