⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 func.c

📁 一个C语言的聊天室源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		sprintf(toself,"<font color=green>【提示】</font>喔,你想干什么呀?<br>\n");
		return;
	}

	if( strstr(cmdstr,"roomid") == cmdstr )
	{ /* //roomid [roomid] 转换到指定的房间 */
		int roomid=atoi(&cmdstr[7]);
		char *roomname;

		roomname=GetRN(roomid);
		if( roomname!=NULL && strlen(roomname)>0 )
		{
			ROOMINFO *rp;
			unsigned int back;

			rp=GetRP(up->roomid);
			rp->usernum--;
			rp=GetRP(roomid);
			rp->usernum++;

			back=up->roomid;
			up->roomid=roomid;
			sprintf(toself,"<script>top.location.reload();</script>");
			sprintf(totarget,"");
			sprintf(toall,"【注意】[%s]离开了<font color=red>SocketChat聊天室[%s]</font>,跑到[%s]去了!<script>parent.RemoveUser('%s','%s','%s');</script><br>", up->nickname, GetRN(back), GetRN(up->roomid), up->userid, up->nickname, up->sex );
		}
		else
		{
			sprintf(toself,"<font color=red>指定的房间不存在!</font><br>");
			sprintf(totarget,"");
			sprintf(toall,"");
		}
	}else if( strstr(cmdstr,"ip") == cmdstr )
	{/* 01.查看IP */
			if( toup==NULL )
			{
				sprintf(toself,"<font color=green>【注意】</font>目标不存在<br>\n");
				return;
			}
			sprintf(toself,"<font color=green>【注意】</font>[%s]的IP地址为:%s<br>\n",toup->nickname, toup->ip);
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"kickip") == cmdstr )
	{/* 02.踢人IP */
			if( toup==NULL )
			{
				sprintf(toself,"<font color=green>【注意】</font>目标不存在<br>\n");
				return;
			}
			if( up->level <= toup->level )
				sprintf(toself,"<font color=green>【注意】</font>你和他是平级哦……<br>\n");
			else
			{
				sprintf(toself,"");
				sprintf(totarget,"");

				sprintf(toall,"<font color=green>【通知】</font>[%s](%s)被(%d)号管理员请出SocketChat聊天室[%s]<br><script>parent.RemoveUser('%s','%s','%s');</script>\n",toup->nickname,toup->userid,up->n_manager,GetRN(up->roomid),toup->userid,toup->nickname,toup->sex);
				if( toup->level >0 )	AddBanList(2,toup->ip,60*30,toup->roomid);	/* 半个小时 */

				sprintf(Buffer,"<font color=red><b>您由于违反聊天室规定,被(%d)号管理员请出了聊天室。如果您对此不满,请按下&lt;Print Screen&gt;键,拷贝下此屏幕,然后发送到chatadmin@socketchat.com。我们会对您的投诉进行及时的处理。</b></font><br>\n",up->n_manager);
				sp1=sysinfo.SOCKET_HEAD;
				while(sp1!=NULL)
				{
					if(sp1->user==toup)	break;
					sp1=sp1->next;
				}
				write(sp1->socketfd,Buffer,strlen(Buffer));

				LogOut(toup->nickname,toup->sid);
			}
	}else if( strstr(cmdstr,"kicklist") == cmdstr )
	{/* 03.踢人名单 */
			BANLIST *p;
			char buf[3000];

			IsBan("", "", -1);
			p=BanList;
			buf[0]='\0';
			while( p!=NULL )
			{
				if( p->roomid==-1 || p->roomid==up->roomid )
					sprintf(&buf[strlen(buf)],"%s,",p->ban);
				if( strlen(buf) >1800 )
				{
					int j;
					char *s;

					j=strlen(buf);
					if( j-1800 <2 ) j-=2;
					s=strstr(&buf[j],",");
					if( s==NULL )
						sprintf(buf,"Process 'kicklist' Error<br>\n");
					else
						sprintf(s,"......");
					break;
				}
				p=p->next;
			}
			sprintf(toself,"<font color=green>【注意】</font>被踢人员的清单:%s<br>\n",buf);
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"kick") == cmdstr )
	{/* 04.踢人名字 */
			if( toup==NULL )
			{
				sprintf(toself,"<font color=green>【注意】</font>目标不存在<br>\n");
				return;
			}
			if( up->level <= toup->level )
				sprintf(toself,"<font color=green>【注意】</font>你和他是平级哦……<br>\n");
			else
			{
				sprintf(toself,"");
				sprintf(totarget,"");

				sprintf(toall,"<font color=green>【通知】</font>[%s](%s)被(%d)号管理员请出SocketChat聊天室[%s]<br><script>parent.RemoveUser('%s','%s','%s');</script>\n",toup->nickname,toup->userid,up->n_manager,GetRN(up->roomid),toup->userid,toup->nickname,toup->sex);
				if( toup->level >0 )	AddBanList(1,toup->userid,60*30,toup->roomid); /* 半个小时 */

				sprintf(Buffer,"<font color=red><b>您由于违反聊天室规定,被(%d)号管理员请出了聊天室。如果您对此不满,请按下&lt;Print Screen&gt;键,拷贝下此屏幕,然后发送到chatadmin@socketchat.com。我们会对您的投诉进行及时的处理。</b></font><br>\n",up->n_manager);
				sp1=sysinfo.SOCKET_HEAD;
				while(sp1!=NULL)
				{
					if(sp1->user==toup)	break;
					sp1=sp1->next;
				}
				write(sp1->socketfd,Buffer,strlen(Buffer));

				LogOut(toup->nickname,toup->sid);
			}
	}else if( strstr(cmdstr,"unkick") == cmdstr )
	{/* 05.解除踢人 */
			if( strlen(cmdstr)<=6 )
			{
				sprintf(toself,"<font color=green>【指令格式】</font>//unkick [ID]<br>\n");
				return;
			}
			UnBan(&cmdstr[7], &cmdstr[7], up->roomid);
			sprintf(toself,"<font color=green>【注意】</font>[%s] 被放出来了:-)<br>\n",&cmdstr[7]);
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"filterlist") == cmdstr )
	{/* 06.过滤名单 */
			USERINFO *ulist;
			char buf[3000];

			ulist=sysinfo.USER_HEAD;
			while(ulist!=NULL)
			{
				if( ulist->status&0x0001 )
				{
					sprintf(&buf[strlen(buf)],"%s,",ulist->userid);
				}
				if( strlen(buf) >1800 )
				{
					int j;
					char *s;

					j=strlen(buf);
					if( j-1800 <2 ) j-=2;
					s=strstr(&buf[j],",");
					if( s==NULL )
						sprintf(buf,"Process 'filterlist' Error<br>\n");
					else
						sprintf(s,"......");
					break;
				}
				ulist=ulist->next;
			}
			sprintf(toself,"<font color=green>【注意】</font>被过滤人员名单:%s<br>\n",buf);
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"filter") == cmdstr )
	{/* 07.系统过滤 */
			if( toup==NULL )
			{
				sprintf(toself,"<font color=green>【注意】</font>目标不存在<br>\n");
				return;
			}

			if( up->level <= toup->level )
				sprintf(toself,"<font color=green>【注意】</font>你和他是平级哦……<br>\n");
			else
			{
				toup->status|=0x0001;
				sprintf(toself,"<font color=green>【注意】</font>[%s](%s)已经加入到系统过滤表",toup->userid,toup->nickname);
				sprintf(totarget,"<font color=green>【注意】</font>您已经被系统过滤");
			}
			sprintf(toall,"");
	}else if( strstr(cmdstr,"modlist") == cmdstr )
	{/* 08.室主列表 */
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"adminlist") == cmdstr )
	{/* 09.网管列表 */
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"unfilter") == cmdstr )
	{/* 10.解除过滤 */
			if( toup==NULL )
			{
				sprintf(toself,"<font color=green>【注意】</font>目标不存在<br>\n");
				return;
			}
			if( toup->status&0x0001 )	toup->status^=0x0001;
			sprintf(toself,"<font color=green>【注意】</font>[%s](%s)已经解除过滤<br>\n",toup->userid,toup->nickname);
			sprintf(totarget,"<font color=green>【注意】</font>您已从系统过滤名单中移出<br>\n");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"msg") == cmdstr )
	{/* 11.发管理员消息 */
			if( strlen(cmdstr)<=3 )
			{
				sprintf(toself,"<font color=green>【指令格式】</font>//msg [信息]<br>\n");
				return;
			}
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"<font color=green>【管理员消息】</font><font color=red>%s -- by [%s]</font><br>\n",&cmdstr[4], up->nickname);
	}else if( strstr(cmdstr,"grant") == cmdstr )
	{/* 12.授予室主 */
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"revoke") == cmdstr )
	{/* 13.取消室主 */
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"hidden") == cmdstr )
	{/* 14.隐身 */
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"appear") == cmdstr )
	{/* 15.现身 */
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"kill") == cmdstr )
	{/* 16.踢全站IP */
			if( toup==NULL )
			{
				sprintf(toself,"<font color=green>【注意】</font>目标不存在<br>\n");
				return;
			}
			if( up->level <= toup->level )
				sprintf(toself,"<font color=green>【注意】</font>你和他是平级哦……<br>\n");
			else
			{
				sprintf(toself,"");
				sprintf(totarget,"<font color=red><b>您由于违反聊天室规定,被(%d)号管理员请出了聊天室。如果您对此不满,请按下<Print Screen>键,拷贝下此屏幕,然后发送到chatadmin@socketchat.com。我们会对您的投诉进行及时的处理。</b></font>\n",up->n_manager);
				sprintf(toall,"<font color=green>【通知】</font>[%s](%s)被(%d)号管理员请出SocketChat聊天室[%s]\n",toup->nickname,toup->userid,up->n_manager,GetRN(up->roomid));
				AddBanList(2,toup->ip,60*30,-1);	/* 半个小时 */
				LogOut(toup->nickname,toup->sid);
			}
	}else if( strstr(cmdstr,"bcast") == cmdstr )
	{/* 17.系统消息 */
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"%s",&cmdstr[6]);
	}else if( strstr(cmdstr,"seeall") == cmdstr )
	{/* 18.看破隐身 */
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"hereall") == cmdstr )
	{/* 19.查看私聊 */
			up->status|=0x0200;
			sprintf(toself,"<font color=green>【注意】</font>您现在可以看到其它人的私聊,请您遵守管理员守则,为用户保密<br>\n");
			sprintf(totarget,"");
			sprintf(toall,"");
	}else if( strstr(cmdstr,"status") == cmdstr )
	{/* 20.查看状态 */
			if( toup==NULL )
			{
				sprintf(toself,"<font color=green>【注意】</font>目标不存在<br>\n");
				return;
			}
			sprintf(toself,"<font color=green>【状态】</font>等级:%d<br>\n",toup->level);
			sprintf(totarget,"");
			sprintf(toall,"");
	}else
	{
			sprintf(toself,"");
			sprintf(totarget,"");
			sprintf(toall,"");
	}
}

void Func_Say(int connfd, RequestData *RDp)
{
	char *fromname,*toname,*action,*color,*pic,*hidden,*message,*roomid;
	USERINFO *utest;

	fromname=GetFormVarValue(RDp->Form,"fromname");
	toname=GetFormVarValue(RDp->Form,"toname");
	action=GetFormVarValue(RDp->Form,"action");
	color=GetFormVarValue(RDp->Form,"color");
	pic=GetFormVarValue(RDp->Form,"pic");
	hidden=GetFormVarValue(RDp->Form,"hidden");
	message=GetFormVarValue(RDp->Form,"msg");
	roomid=GetFormVarValue(RDp->Form,"roomid");

	utest = GetUP(fromname);

	if( utest==NULL || utest->status == 0 || utest->status & 0x0001 )
	{
		WriteHeader(connfd);
		return;
	}

	if( fromname!=NULL && toname!=NULL && action!=NULL && color!=NULL && pic!=NULL && message!=NULL && roomid!=NULL )
	{
		printf("Roomid=[%d], ID=[%s], ToID=[%s], Hidden=%d\n",atoi(roomid),GetID(fromname), GetID(toname),(hidden==NULL)?0:1 );
		if( message!=NULL )
		{
			char toself[2048], totarget[2048], toall[2048];

			if( message[0]=='/' && message[1] =='/' )
			{
				Func_Cmd(&message[2], GetID(fromname), GetID(toname), toself, totarget, toall);
				if( strlen(toself)!=0 || strlen(totarget)!=0 || strlen(toall)!=0 )
				{
					if( strlen(toself) != 0 )
					{
						USERINFO *up;

						up = GetUP(fromname);
						AddWords(up->roomid, NULL, GetID(fromname), 0, color, pic, toself, 3 );
					}
					if( strlen(totarget) != 0 )
					{
						AddWords(atoi(roomid), NULL, GetID(toname), 0, color, pic, totarget, 3 );
					}
					if( strlen(toall) != 0 )
					{
						AddWords(atoi(roomid), NULL, NULL, 0, color, pic, toall, 2 );
					}
				}
				else	AddWords(atoi(roomid), GetID(fromname), GetID(toname), 0, color, pic, message, (hidden==NULL)?0:1 );
			}
			else	AddWords(atoi(roomid), GetID(fromname), GetID(toname), 0, color, pic, message, (hidden==NULL)?0:1 );
			ForceSend();
		}
	}
	WriteHeader(connfd);
}


void Func_Act(char *actstr, char *retstr, char *id, char *toid)
{
	unsigned int i;
	char *buf;
	char buf1[4096];
	ActFace *p;

	p=sysinfo.action;

	while( p!=NULL )
	{
		if( strcmp(actstr, p->name)==0 ||
			strcmp(actstr, p->action)==0 )
		{
			if( toid==NULL || strlen(toid)==0 )
			{
				if( id==NULL || strlen(id)==0 )
				{	/* id 与 toid 都为空 */
					retstr[0]='\0';
					return;
				}
				buf = (char *)Malloc(strlen(p->msg1)+1);
				strcpy( buf, p->msg1 );
				sprintf(buf1,"<a href=\"\" OnClick=\"parent.SelectUser(\\\'%s\\\');return false;\">%s</a>",id,GetNN(id));
				buf = ExChange(buf, "[source]", buf1);
				strcpy( retstr, buf );
				Free(buf);
				return;
			}
			else
			{
				if( id==NULL || strlen(id)==0 )
				{	/* id 为空 */
					retstr[0]='\0';
					return;
				}
				buf = (char *)Malloc(strlen(p->msg2)+1);
				strcpy( buf, p->msg2 );
				sprintf(buf1,"<a href=\"\" OnClick=\"parent.SelectUser(\\\'%s\\\');return false;\">%s</a>",id,GetNN(id));
				buf = ExChange(buf, "[source]", buf1);
				sprintf(buf1,"<a href=\"\" OnClick=\"parent.SelectUser(\\\'%s\\\');return false;\">%s</a>",toid,GetNN(toid));
				buf = ExChange(buf, "[target]", buf1);
				strcpy( retstr, buf );
				Free(buf);
				return;
			}
		}
		p=p->next;
	}
	retstr[0]='\0';
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -