设为首页收藏本站

晨风QQ机器人论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 294|回复: 6

[技术探讨] 用卡密的方式实现同意新人加群,每个卡密只能加一人

[复制链接]

77

主题

741

帖子

3845

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3845
发表于 2017-4-21 14:16:53 | 显示全部楼层 |阅读模式
在单个群的群规设置那里的“发来的验证消息包含”那里设置如下网址:
http://127.0.0.1/testplug.dll?fu ... 5%AF%B9&cmdstr=
其中的defaultnum的参数还是跟之前的myrechargefun版本一样,代表着默认返回什么值,比如是返回2000,即无条件同意,如果是返回20,则如果满足群规设置里其它的限制条件的话就自动同意,如果是2,则自动拒绝。其中的defaultreason参数设置的相当于进群的万能钥匙,只要验证内容包含那个文字,就会被视作输入了有效卡密,如果不需要设置,就保留它的内容为空即可,比如“……其它参数&defaultreason=&其它参数……”,denyreason代表的是当有人加群,没有使用正确的卡密时,拒绝的理由写什么,如果denyreason是空的话,则不会自动拒绝,而是不处理,等待其他管理员手动处理这条加群消息(类似“……其它参数&denyreason=&其它参数……”,也可以直接不传denyreason参数进去),denyreason跟defaultreason参数一样,如果是汉字都要通过http://www.cfxy.me/cfrobotword.html进行转码。
要使用此功能,需要在“机器人插件”目录下自己手动创建以群号+进群卡密列表.txt(比如208597416进群卡密列表.txt)的文件,里面输入卡密文字,一行一个,可以是英文的,也可以是中文的,
如果在参数列表那里reuseflag=0的话,那么每次有人用某个卡密加群了,就会自动从诸如“208597416进群卡密列表.txt”中删除那行卡密,reuseflag=1则不删除那一行,其他人可以继续用那个卡密加群。不管reuseflag是=1还是=0,都会把那个使用者的qq号和卡密移到类似“208597416已使用的进群卡密列表.txt”的文件中。
每个群都可以独立设置。如果不想用这个功能的群,验证消息那里就不填写那个插件网址即可。

  1. void AppendUsedspecifygrouppinlist(LPCTSTR usedpinstr,INT64 groupnum,INT64 qqnum)
  2. {


  3.         CReadAUStdioFile cook_file1(true);
  4.         CString Ignorefilename;
  5.         CString tempstr;
  6.         CString finalfilepath;
  7.         Ignorefilename.Format(_T("%lld已使用的进群卡密列表.txt"), groupnum);

  8.         finalfilepath = dll_complete_path(Ignorefilename);

  9.                 if (cook_file1.Open(finalfilepath, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate | CFile::shareDenyWrite))
  10.                 {

  11.                         cook_file1.SeekToEnd();
  12.                         CString newlinestr;
  13.                         newlinestr.Format(_T("%s\t%lld"), usedpinstr, qqnum);
  14.                         cook_file1.WriteLineStr(newlinestr);
  15.                        

  16.                         cook_file1.Close();
  17.                 }
  18.        



  19. }
  20. void LoadorSavespecifygrouppinlist(INT64 groupnum,CStringvect &temppinlist,BOOL bLoad)
  21. {


  22.                 CReadAUStdioFile cook_file1(true);
  23.                 CString Ignorefilename;
  24.                 CString tempstr;
  25.                 CString finalfilepath;
  26.                 Ignorefilename.Format(_T("%lld进群卡密列表.txt"), groupnum);

  27.                 finalfilepath = dll_complete_path(Ignorefilename);
  28.        
  29.                 if (bLoad)
  30.                 {
  31.                         if (cook_file1.Open(finalfilepath, CFile::modeRead))
  32.                         {
  33.                                 while (cook_file1.ReadString(tempstr))
  34.                                 {
  35.                                         temppinlist.push_back(tempstr);
  36.                                
  37.                                 }
  38.                                
  39.                                 cook_file1.Close();
  40.                         }

  41.                 }
  42.                 else
  43.                 {
  44.                         if (cook_file1.Open(finalfilepath, CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite))
  45.                         {

  46.                                 for (UINT i = 0; i < temppinlist.size();i++)
  47.                                 {
  48.                                         cook_file1.WriteLineStr(temppinlist[i]);
  49.                                 }

  50.                                 cook_file1.Close();
  51.                         }
  52.                 }


  53.        
  54. }
  55. DLL1_API BOOL __stdcall myrechargefun3(LPTSTR buf)
  56. {
  57.         static int todayjoinnum = 0;
  58.         static int m_last_timetask_day = 0;
  59.         //mainhwnd=(HWND)1323213;
  60.         CKeepMap<CString, LPCTSTR, CString, LPCTSTR> paramstrmap;
  61.         InitParamMap(paramstrmap, buf);
  62.         loadbadnicknamelist();
  63.         INT64 robotselfqq = 0;
  64.         INT64 cfrobotgroupnum = 0;
  65.         INT64 cfrobotqqnum = 0;
  66.         INT64 cfrobotselfnum;
  67.         INT64 myhwnd = 0;
  68.         int reuseflag = 0;
  69.         int defaultnum=20;
  70. CString defaultreason;
  71.         CString denyreason;
  72.         CString keyname;
  73.         CString cmdstr;


  74.         GetValue(cfrobotselfnum)
  75.                 GetValue(cfrobotgroupnum)
  76.                 GetValue(cfrobotqqnum)
  77.         GetStr(cmdstr)

  78.                 GetStr(defaultreason)
  79.                 GetStr(denyreason)
  80.                

  81.                 GetValue(myhwnd)
  82.                 GetValue(defaultnum)
  83.                 GetValue(reuseflag)


  84.                 SYSTEMTIME mySystemTime;
  85.         GetLocalTime(&mySystemTime);




  86.         CString sldff;
  87.         int tempdefaultnum = defaultnum;

  88.         //读取对应群号的卡密列表,如果验证消息不包含有效卡密,则不会自动以defaultnum的数值返回。
  89.         //208597416进群卡密列表.txt
  90.         CStringvect restpinvect;
  91.         LoadorSavespecifygrouppinlist(cfrobotgroupnum, restpinvect,true);//每次都从文件中读取,这样如果用户通过外部的方式修改了文本内容,就可以实时生效。
  92. //        MessageBox((HWND)myhwnd, cmdstr, defaultreason, 0);
  93.         BOOL bOmnipotent = false;
  94.         CString validepinstr;
  95.         if (!defaultreason.IsEmpty() && StrStrI(cmdstr, defaultreason))
  96.         {
  97.                 validepinstr = defaultreason;
  98.                 bOmnipotent = true;
  99.         }
  100.         else
  101.         {
  102.                 for (UINT i = 0; i < restpinvect.size(); i++)
  103.                 {
  104.                         if (StrStrI(cmdstr, restpinvect[i]))
  105.                         {
  106.                                 validepinstr = restpinvect[i];
  107.                                 break;
  108.                         }


  109.                 }
  110.         }
  111.         if (validepinstr.IsEmpty())
  112.         {
  113.                 //如果还是等于空,则说明不包含任何一个有效的卡密文字
  114.                 tempdefaultnum = 15;//就不会自动同意,是否会直接拒绝,取决于denyreason参数是不是为空

  115.         }
  116.         else
  117.         {
  118.                 AppendUsedspecifygrouppinlist(validepinstr, cfrobotgroupnum, cfrobotqqnum);

  119.                 if (!bOmnipotent&&!reuseflag)//不是用万能密钥进群的,如果reuseflag=0,那么就要从类似的208597416进群卡密列表.txt中删除那一行
  120.                 {
  121.                         restpinvect.erase(::find(restpinvect.begin(), restpinvect.end(), validepinstr));
  122.                         LoadorSavespecifygrouppinlist(cfrobotgroupnum, restpinvect, false);//

  123.                 }
  124.         }

  125.         sldff.Format(_T("%d"), tempdefaultnum);


  126.         if (tempdefaultnum<20&&!denyreason.IsEmpty())
  127.         {

  128.                         sldff = denyreason;
  129.         }


  130.         lstrcpy(buf, sldff);


  131.         return true;

  132. }
复制代码


回复

使用道具 举报

77

主题

741

帖子

3845

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3845
 楼主| 发表于 2017-4-21 14:24:29 | 显示全部楼层
要直接使用这个功能,可以在群里发
同步网络上的自定义小游戏http://www.cfxy.me/game/testplug.dll
或者到注册群里下载最新版的testplug.dll文件。
然后在单个群的群规设置中的验证消息里设置
http://127.0.0.1/testplug.dll?fu ... reason=&cmdstr=
回复 支持 反对

使用道具 举报

4

主题

673

帖子

2192

积分

金牌会员

Rank: 6Rank: 6

积分
2192
发表于 2017-4-21 14:54:08 | 显示全部楼层
这个对卖配置的或者什么售后群有用
回复 支持 反对

使用道具 举报

2

主题

50

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2017-4-21 15:19:12 | 显示全部楼层
看起来不错,晨风大大多多更新几些功能
回复 支持 反对

使用道具 举报

12

主题

233

帖子

927

积分

高级会员

Rank: 4

积分
927
发表于 2017-4-21 16:05:33 | 显示全部楼层
很高端的样子,但是不懂。
免费配置更新群:568772061
可帮助新手解决一些常见问题
回复 支持 反对

使用道具 举报

4

主题

386

帖子

965

积分

高级会员

Rank: 4

积分
965
发表于 2017-5-4 03:47:06 | 显示全部楼层
表示有点蒙蔽!
回复 支持 反对

使用道具 举报

2

主题

141

帖子

327

积分

中级会员

Rank: 3Rank: 3

积分
327
发表于 7 天前 | 显示全部楼层
感觉上晨风说的挺仔细明白的,但是呢,还是不懂
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|CFSoft ( 赣ICP备15001479号-1  

GMT+8, 2017-5-26 23:08 , Processed in 0.079832 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表