精华内容
下载资源
问答
  • 创建telegram 机器人 并发送消息

    万次阅读 2018-06-20 14:17:41
    telegram有个聊天机器人可以自动发消息,也是挺有意思的。它还开放了api,可以自己创建bot,通过api发送消息,视频,声音,文件等功能。下面,我简单介绍下怎么新建一个bottelegram有两种api,一种是bot ap...
    telegram是国外常用的聊天功能,功能很强大,除了聊天还可以玩游戏,传文件,视频,声音,投票,群组。当然,这些跟qq,微信都很类似了。但是它毕竟是国外最常用的IM之一。telegram有个聊天机器人可以自动发消息,也是挺有意思的。它还开放了api,可以自己创建bot,通过api发送消息,视频,声音,文件等功能。下面,我简单介绍下怎么新建一个bot

    telegram有两种api,一种是bot api,一种是telegram api。bot api是基于http访问,telegram api是基于mtproto访问,访问需要加密,相对要复杂一些。后者也可以实现发送消息等功能。这里我只说第一种bot api。

    首先要创建一个bot。访问
    https://telegram.me/botfather
    它会提示你用telegram打开。然后你就打开了botfarther的聊天对话框。输入
    /newbot 
    回车发送。botfarther会反馈
    Alright, a new bot. How are we going to call it? Please choose a name for your bot.

    输入你要创建的bot名字。例如david_bot,回车发送

    它会反馈
    Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

    我再输入 DavidBot。这是这个机器人的名字。

    它会反馈
    Sorry, this username is already taken. Please try something different.

    这名字已经被用了。我们换一个

    GZ_David_Bot

    它会反馈
    BotFather, [16.02.17 14:23]
    Done! Congratulations on your new bot. You will find it at t.me/Gz_David_Bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

    Use this token to access the HTTP API:
    xxx:xxx

    For a description of the Bot API, see this page: https://core.telegram.org/bots/api

    这里它生成了api token。我们记下它。以后api请求都会用到。如果需要帮助,输入 /help 

    输入/token 可以重新生成一个token。
    /revoke 可以撤销一个token

    我们需要用这个bot来发送消息,首先需要创建一个group,加入一些人,同时将这个bot也加进去。然后在这个group中发送消息。类似 /hello @GZ_David_Bot

    然后访问 
    https://api.telegram.org/botxxx:xxx/getUpdates

    我们会获取到一个json
    [java] view plain copy
    1. {  
    2.     "ok" : true,  
    3.     "result" : [{  
    4.             "update_id" : xxx,  
    5.             "message" : {  
    6.                 "message_id" : 4,  
    7.                 "from" : {  
    8.                     "id" : xxx,  
    9.                     "first_name" : "david",  
    10.                     "last_name" : "huang",  
    11.                     "username" : "davidhuang"  
    12.                 },  
    13.                 "chat" : {  
    14.                     "id" : -xxx,  
    15.                     "title" : "bot",  
    16.                     "type" : "group",  
    17.                     "all_members_are_administrators" : true  
    18.                 },  
    19.                 "date" : xxx,  
    20.                 "text" : "/hello @GZ_David_Bot",  
    21.                 "entities" : [{  
    22.                         "type" : "bot_command",  
    23.                         "offset" : 0,  
    24.                         "length" : 6  
    25.                     }  
    26.                 ]  
    27.             }  
    28.         },  
    29.     ]  
    30. }  

    这里,我们看到有个id,指的就是当前group的id。我们记下它 。然后执行以下curl。
    botXXX:YYYY 指的是bot+token,一定要加上bot前缀
    chat_id就是上面的id,注意是负数,必须有-
    发送内容是=my sample text

    curl -X POST "https://api.telegram.org/botXXX:YYYY/sendMessage" -d "chat_id=-zzzzzzzzzz&text=my sample text"


    或者在浏览器地址输入:

    https://api.telegram.org/botXXX:YYYY/sendMessage?chat_id=-zzzzzzzzzz&text=my sample text


    执行完,这个group就收到消息了。

    api git:
    https://github.com/unreal4u/telegram-api/graphs/contributors
    但是悲剧的是,它只支持php7.
    https://github.com/unreal4u/telegram-api/wiki

    另外,也可以通过webhook api获取聊天记录等功能。但是这个api要求我们的站点必须是https证书

    还有个bot sdk,它只要php5.5就可以了
    https://telegram-bot-sdk.readme.io/reference#forwardmessage
    https://github.com/irazasyed/telegram-bot-sdk
    https://telegram-bot-sdk.readme.io/v2.0/reference
    sdk 文档:
    https://telegram-bot-sdk.readme.io/docs
    安装 
    composer require irazasyed/telegram-bot-sdk

    这个sdk包含了所有的telegram bot api,例如支持command,keyboard,webhook


    参考文档:
    https://fullmeter.com/blog/?p=14
    http://stackoverflow.com/questions/32423837/telegram-bot-how-to-get-a-group-chat-id-ruby-gem-telegram-bot
    https://core.telegram.org/bots
    https://core.telegram.org/bots/api
    展开全文
  • 在上一篇文章写了如何配置服务器:...要实现消息获取和自动回复,需要了解微信是怎么实现这个过程:接收普通消息当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。文本消息...

    在上一篇文章写了如何配置服务器:

    https://blog.csdn.net/qq_36313726/article/details/81027366

    今天我就给大家说下如何获取用户发送消息并实现回复,自己在弄这个过程走了许多坑。

    要实现消息获取和自动回复,需要了解微信是怎么实现这个过程:

    我从微信官方文档摘取了下面比较重要的信息

    接收普通消息

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

    文本消息在请求的输出流中,而不是参数位置,参数是对xml中标签的解释。

    文本消息

    <xml>  
    <ToUserName>< ![CDATA[toUser] ]></ToUserName>  
    <FromUserName>< ![CDATA[fromUser] ]></FromUserName>    
    <CreateTime>1348831860</CreateTime>
    <MsgType>< ![CDATA[text] ]></MsgType>  
    <Content>< ![CDATA[this is a test] ]></Content> 
    <MsgId>1234567890123456</MsgId>  
    </xml> 
    参数描述
    ToUserName开发者微信号
    FromUserName发送方帐号(一个OpenID)
    CreateTime消息创建时间 (整型)
    MsgTypetext
    Content文本消息内容
    MsgId消息id,64位整型

    被动回复用户消息

    当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。

    回复文本消息

    <xml> 
    <ToUserName>< ![CDATA[toUser] ]></ToUserName> 
    <FromUserName>< ![CDATA[fromUser] ]></FromUserName> 
    <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> 
    <Content>< ![CDATA[你好] ]></Content> 
    </xml>
    参数是否必须描述
    ToUserName接收方帐号(收到的OpenID)
    FromUserName开发者微信号
    CreateTime消息创建时间 (整型)
    MsgTypetext
    Content回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

    在网上看到这张图片很好理解


    微信公众号开发文档说了,只有对服务器进行验证的时候才会使用到get请求到服务器的url中,其它一律使用post请求。

    因此用户发送消息时,微信服务器是通过post请求到我们的服务器上。

    可以看下我写的代码来理解这个过程,这个代码有部分利用上一篇文章说过的步骤:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.util.Date;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.qq.weixin.mp.aes.AesException;
    import com.qq.weixin.mp.aes.SHA1;
    
    /**
     * Servlet implementation class test
     */
    @WebServlet("/test")
    public class test extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
    
    		String signature = request.getParameter("signature");
    		String timestamp = request.getParameter("timestamp");
    		String nonce = request.getParameter("nonce");
    		String echostr = request.getParameter("echostr");
    		String token = "jylife";
    		String jiami = "";
    		String openid=request.getParameter("openid");
    		String body=request.getParameter("body");
    		System.out.println(body);
    		Date date=new Date();
            try {
                jiami=SHA1.getSHA1(token, timestamp, nonce,"");//这里是对三个参数进行加密
           } catch (AesException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }
            System.out.println("加密"+jiami);
            System.out.println("本身"+signature);
               PrintWriter out=response.getWriter();
               if(jiami.equals(signature))
               out.print(echostr);
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            //获取服务器发送过来的信息,因为不是参数,得用输入流读取
    		BufferedReader reader = null;
            StringBuilder sb = new StringBuilder();
            try{
                reader = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf-8"));
                String line = null;
                while ((line = reader.readLine()) != null){
                    sb.append(line);
                }
            } catch (IOException e){
                e.printStackTrace();
            } finally {
                try{
                    if (null != reader){ reader.close();}
                } catch (IOException e){
                	e.printStackTrace();
                }
            }
            System.out.println("用户发送过来信息:"+sb);//将用户发送得消息打印出来
            /*	可以request看出所有的参数信息
             * 	Enumeration enu=request.getParameterNames();  
    			while(enu.hasMoreElements()){  
    			String paraName=(String)enu.nextElement();  
    			System.out.println(paraName+": "+request.getParameter(paraName));  
    			}
             */
    		String openid=request.getParameter("openid");//获取参数中的openid
    		PrintWriter out=response.getWriter();
    			String replyMsg = "<xml>"
    					+ "<ToUserName><![CDATA["+openid+"]]></ToUserName>"//回复用户时,这里是用户的openid;但用户发送过来消息这里是微信公众号的原始id
    					+ "<FromUserName><![CDATA["+"这里微信公众号的原始id"+"]]></FromUserName>"//这里填写微信公众号 的原始id;用户发送过来时这里是用户的openid
    					+ "<CreateTime>1531553112194</CreateTime>"//这里可以填创建信息的时间,目前测试随便填也可以
    					+ "<MsgType><![CDATA[text]]></MsgType>"//文本类型,text,可以不改
    					+ "<Content><![CDATA[我喜欢你]]></Content>"//文本内容,我喜欢你
    					+ "<MsgId>1234567890123456</MsgId> "//消息id,随便填,但位数要够
    					+ " </xml>";
    			System.out.println(replyMsg);//打印出来
    			out.println(replyMsg);//回复
    
    	}
    
    }

    这里还是强调一下,文本消息在输出流中,获取参数是看不到的;如果还是有点犯晕,可以将里面注释掉的输出全部request参数代码部分运行一下。

    最后我参考微信官方给的实例,对代码做了一点适配,可以不需要手动配置微信开发者的初始id

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    
    import com.qq.weixin.mp.aes.AesException;
    import com.qq.weixin.mp.aes.SHA1;
    
    /**
     * Servlet implementation class test
     */
    @WebServlet("/test")
    public class test extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
    
    		String signature = request.getParameter("signature");
    		String timestamp = request.getParameter("timestamp");
    		String nonce = request.getParameter("nonce");
    		String echostr = request.getParameter("echostr");
    		String token = "jylife";
    		String jiami = "";
    		String openid=request.getParameter("openid");
    		String body=request.getParameter("body");
    		System.out.println(body);
    		Date date=new Date();
            try {
                jiami=SHA1.getSHA1(token, timestamp, nonce,"");//这里是对三个参数进行加密
           } catch (AesException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }
               PrintWriter out=response.getWriter();
               if(jiami.equals(signature))
               out.print(echostr);
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
    		PrintWriter out=response.getWriter();
    		try
    		{
    			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    			DocumentBuilder db = dbf.newDocumentBuilder();
    			Document document = db.parse(request.getInputStream());
    			Element root = document.getDocumentElement();
    			String  wechatId = root.getElementsByTagName("ToUserName").item(0).getTextContent();
    			String 	openid = root.getElementsByTagName("FromUserName").item(0).getTextContent();
    			String 	msg = root.getElementsByTagName("Content").item(0).getTextContent();//用户发送的内容
    			System.out.println(msg);//打印用户发送的消息
    			String content="";
    			//对用户发送过来的内容选择要回复的内容
    			if(msg.matches("喜欢"))
    			{
    				content="我也喜欢你";
    			}
    			else
    			{
    				content="我也不喜欢你";
    			}
    			String replyMsg = "<xml>"
    					+ "<ToUserName><![CDATA["+openid+"]]></ToUserName>"//回复用户时,这里是用户的openid;但用户发送过来消息这里是微信公众号的原始id
    					+ "<FromUserName><![CDATA["+wechatId+"]]></FromUserName>"//这里填写微信公众号 的原始id;用户发送过来时这里是用户的openid
    					+ "<CreateTime>1531553112194</CreateTime>"//这里可以填创建信息的时间,目前测试随便填也可以
    					+ "<MsgType><![CDATA[text]]></MsgType>"//文本类型,text,可以不改
    					+ "<Content><![CDATA["+content+"]]></Content>"//文本内容,我喜欢你
    					+ "<MsgId>1234567890123456</MsgId> "//消息id,随便填,但位数要够
    					+ " </xml>";
    			System.out.println(replyMsg);//打印出来
    			out.println(replyMsg);//回复
    		}
    		catch(Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    
    }
    

    展开全文
  • 今天看到qq群里有人发消息 招能开发自动化测试工具的测试工程师 于是搜索了一下开发自动化测试工具到底需要具备啥技能或知识 于是发现了下面这篇神文: 你是一家大公司里不得志的程序员。和你同年进公司的那些人在...

    今天看到qq群里有人发消息 招能开发自动化测试工具的测试工程师 于是搜索了一下开发自动化测试工具到底需要具备啥技能或知识
    于是发现了下面这篇神文:
    你是一家大公司里不得志的程序员。和你同年进公司的那些人在核心业务上拼命工作,被客户骂,加
    班,交付,开庆功会,拿奖金。而你,不知道怎么的被放到一个叫做“测试工具开发”的边角部门里,
    干着一些不疼不痒不影响公司业绩的工作。你恨。你要报复。你要拿回本该属于自己的一切。

    现在我教你怎么做。

    首先,你要启动一个自主开发自动化测试工具的项目。让老板们相信自动化测试的重要性并不困难,
    世界上有无数的文章和书籍在讲这件事,你们公司请的咨询顾问一定也会说到这件事,这些都是你的
    帮手。真正难的部分是“自主开发”。你用得上一个百试百灵的招数。告诉老板们,一个自主开发的
    工具可以由自己来维护和支持,只有这样才能把核心技术的命脉掌握在自己手里,而不用向别人支付
    维护支持的费用──小心,千万不要提到那些开源的工具,因为老板们万一真的弄懂了“开源”这两
    个字的含义,你的整个大计划就泡汤了。拿IBM的RFT当靶子。除了后面我会说到的各种好处之外,
    IBM的咨询价格足以帮你吓到老板从而启动这个项目。

    然后,你要精心选择一个自动化测试执行引擎。你需要这么一个引擎,因为你不能自己去做一个──
    工作量还在其次,要是连这都能做,你也就不在这个边角部门里郁闷了。同时这个引擎又不能太稳定,
    更不能太开放,这都是你大计划中不可或缺的要素。所以,你看,我说过了,RFT就是最好的靶子:
    它的开放程度确保了你要花好几个月时间才能把它嵌在自己的工具里而且以后再也不会有别人尝试干
    这件事。而且,想想吧,当你跟老板们报告说你hack了IBM的软件从而省下了licence费用时,他们该有多开心。

    接下来,你要发明一套自己的测试脚本语法。沿用RFT的语法当然轻松,但这样使用它的人就会发现自己使用的其实是RFT,然后在该死的互联网上找到相关的资料。不能让这样的事发生。始终记住,你的目标是让自己变得重要。你发明的语法应该基于XML。不仅因为实现简单,而且因为它能确保测试脚本无法被阅读和重构,从而让使用这工具的人跪在你脚边求你支持。关于使用XML的好处,稍后我还会说到。

    当然你不希望向领导演示时用记事本编辑XML。所以你得同时实现一个支持拖拽的测试用例编辑界面。
    把一个测试步骤表示为一个图标,把几个图标往测试用例里一拖,一个测试用例就好了。别忘了,执
    行用例的功能也得在这个界面里实现。千万别为了偷懒而实现一个命令行来执行用例,这很重要。好
    了,现在你可以去演示了,领导一定会喜欢的。“鼠标拖拽其实比键盘输入慢多了!”旁边一个傻逼
    顾问叫喊着。领导们不会听懂他的话。不用理会他,更不要尝试跟他争论,那只会给你自己带来麻烦。

    现在这个工具可以小范围试用了。那些麻烦的用户会抱怨:“我每次都要重复这几个同样的操作!我
    想把它们合并成一个步骤!”镇静。不要骂他们(尽管你一直就想骂他们)。记得吗?让测试用例不
    可被重构是你大计划中的一部分。现在你要笑容可掬说。我们早就考虑到了这个问题,我们的工具可
    以把几个步骤封装成一个更大的、具有业务含义的东西„„嗯,姑且把它叫做“操作词汇”吧。现在
    我就来帮助你们做这个抽象和封装。当然了,操作也要用XML来承载,并且在提供给用户时要先做一
    次编译或者打包或者加密,总之是不能让他们看到源文件。这样他们才能永远依赖你。

    小范围试用很重要。你必须努力工作,帮用户写测试用例,帮他们封装操作,找你能找到的一切资源
    来帮他们,然后把投入二十个人月干出来的成果全都描述成你的工具带来的神奇变化。放心,你只需

    要这么干一次(或者两次)。为了把这些愚蠢的家伙踩在脚下,有时你就得先纡尊降贵。这是策略。

    试用结束,你回到自己的办公室,这些愚蠢的用户还会不停地找你帮忙更新被封装的操作。这是设计
    中的一环。现在你应该做一个中央服务器,把他们的测试用例和操作全都保存在上面,让他们每次执
    行测试都从服务器上取用例脚本。然后告诉他们,这叫云计算,这叫测试工厂。当然这些傻瓜不会懂
    得云计算是什么玩意,但他们会发现你帮他们更新操作的速度变快了,然后他们就会认为这就是云计
    算带来的效果。把他们感谢你的话搜集起来,很快你就会用得上。

    现在万事俱备,可以向老板汇报了。这次汇报的重点是两个关键词。这也是今后宣传这个工具时的常
    用语。一定要背熟。

    关键词1:“第四代自动化测试工具”。你要告诉老板,用Java啦Ruby啦C#啦这些编程语言来编写
    测试用例,那是第三代(前两代是什么就随便你编吧)。第四代的特征就是“基于操作词汇”──也
    就是图形界面上可以拖的那个玩意,尽管你知道它背后就是一坨不能读、不能改、连SVN合并都困难
    的XML。

    关键词2:“测试工厂”。这时候把界面打开,连上中央服务器,让老板看试点项目的测试用例。“坐
    在办公室就能知道所有项目的测试进展情况。”这句话是杀手锏。老板们一定会喜欢,而且会帮你推
    广这个工具。

    只要被推广到更多的项目组,你就会变成红人。现在前面那些设计决策的重要性就逐渐体现了。因为
    测试用例不可重构,任何一个项目想要正经用你的工具都得找你帮忙做操作词汇,为此你就可以成立
    一个部门,拉更多的人来给你打这份苦工,自己当领导。但你又怕别人真的用得太多太频繁,那样的
    话你就得疲于支撑了。放心,因为RFT不稳定,因为每次执行都要连到中央服务器来取用例,因为不
    能通过命令行或者Ant之类的办法把它放进持续集成,还因为用鼠标拖拽就是比用键盘慢得多,自动
    化测试的进展会非常缓慢,你大可以安心享受自己的新办公室。

    先别急着享受,好事才刚开始呢。那些深思远虑的设计决策确保了很多项目不会认真用你的工具。这
    时候作为推行先进自动化测试理念的红人,你正好可以在老板耳边吹吹风,让他们强迫所有项目使用。
    强迫的方式有很多,但你必须记住的手段是给测试人员做职业技能鉴定考试:必须学会用你的工具才
    能评级加薪。这招的关键在于一箭双雕:不仅可以强迫他们使用,而且确保了他们没时间没动力去了
    解别的测试工具──你当然不想这些傻瓜突然冒出来说“这个开源的工具比我们自己的好用多了,而
    且还有那么多社区高手在维护和支持,为什么不用它”,对吧?

    强行推广之后,你接到的支撑需求肯定会剧增。这时你得好好培训一下客服的小弟。要让他们分清用
    户的来头。如果是老板重视的项目,如果办公室离你或者离老板很近,就得大力支持。如果来自什么
    边远山区的支撑需求,那就把它撂到一边凉快去吧。这些边远山区经常会提些奇怪的需求,例如“能
    不能不连中央服务器执行用例?我们这里无法连通公司内网”。让小弟们直接回复“不行”就可以了。
    无法连通公司内网的人同样无法有效地跟领导告状,不用担心他们。

    好了。现在你已经从一个边缘程序员成功晋升为公司的红人。不仅有一帮小弟鞍前马后,而且一大帮
    项目头头们都得求着你优先支撑。这快感,又岂是交付一两个项目、开一两次庆功会所能比拟的?恭
    喜你。你不仅改变了自己的命运,还很有可能改变整个公司的命运呢。

    噢,差点忘了最重要的„„千万别用你的测试工具来给自己的项目做自动化测试。微软那帮傻逼把
    这种行为叫做“吃自己的狗食”,可你做的是毒药,吃下去会害死自己的。切记,切记。

    展开全文
  • 2020年最新一键自动获取合并聊天记录变短链接的cpa技能 5月21日大晚上你可能通宵做卡片引流,很辛苦群发qqxml卡片,刚刚到几千个群的时候,想...QQ里收到的聊天记录消息链接 在邪少QQXMl论坛的《一键自动获取合并聊天

    2020年最新一键自动获取合并聊天记录变短链接的cpa技能

    5月21日大晚上你可能通宵做卡片引流,很辛苦群发qqxml卡片,刚刚发到几千个群的时候,想着今晚会有点流量进来吧!万万没有想到,打不开了。有没有! 也许你是还不知道吧!我知道这个时候你需要我安慰安慰你,让我来一分钟教你

    很多人还是不会怎么多选怎么合并转发,或者到底要发到哪里能取到链接,5月21日官方屏蔽了原来的接口,对一批做cpa的来说致命的打击,这个时候来一首凉凉送给自己
    QQ里收到的聊天记录消息链接
    在邪少QQXMl论坛的《一键自动获取合并聊天记录变短链接》一文中有讲到具体的原理,可以参考一下。
    在这里插入图片描述

    展开全文
  • 北京时间晚上十一点,突然电脑右下角的QQ弹出了一条消息,"在?" 都9012年了还会有人单独个"在"然后人就失踪了?有事情找就直接说事情嘛,你不说事情,我怎么知道我应该"在"还是应该"不在"呢? 鼠标移动到右下角...
  • MYQQ2009 - 用控制台上QQ

    2009-05-11 00:29:28
    2. 恢复注销命令(没有这个,怎么下线呢)。 3. 登录首先获取所有钥匙,避免出现登录后被Kick out。 4. 感谢网友008的提醒,号码格式化字符%d已被替换为%u。 Version 2.4 (2008-7-24) 1. 好友添加。 2. Packed with...
  • 2. 恢复注销命令(没有这个,怎么下线呢)。 3. 登录首先获取所有钥匙,避免出现登录后被Kick out。 4. 感谢网友008的提醒,号码格式化字符%d已被替换为%u。 Version 2.4 (2008-7-24) 1. 好友添加。 2. Packed with...
  • 有别的大神已经开发了微信网页版的自动发消息,可以登录网页版微信的朋友可以去用试一试,我因为不能登录网页版微信所以用不了,今天来尝试一下通过逆向Mac微信客户端,来解决一下这个问题。 实现原理 想象中实现...
  • QQxml红包跳转群代码

    千次阅读 2020-10-08 21:23:26
    想学习,qq消息红包xml跳转怎么做 在红包时,点击右上的衣服图标进入个性红包界面。这里提供的个性红包有各种各样的,包括点赞的那种,不过需要开通会员 手机QQ为什么别人群里面一发红包我就自动会跑到那个群? ...
  • telegram机器人

    2019-07-18 15:36:00
    telegram有个聊天机器人可以自动发消息,也是挺有意思的。它还开放了api,可以自己创建bot,通过api发送消息,视频,声音,文件等功能。下面,我简单介绍下怎么新建一个bot telegram有两种api,一...
  • 创建telegram 机器人

    万次阅读 2017-03-28 14:43:18
    telegram有个聊天机器人可以自动发消息,也是挺有意思的。它还开放了api,可以自己创建bot,通过api发送消息,视频,声音,文件等功能。下面,我简单介绍下怎么新建一个bot telegram有两种api,一种是bot
  • linux--mail设置smtp发送邮件

    万次阅读 2017-11-04 09:13:14
    (因为我们大多数用QQ、微信即时聊天,软件自动推送新闻) 但在linux中,如果经常逛论坛(外国),或者源码官网,都会发现有“订阅邮件列表”的功能。 (邮件列表是什么?我也不太了解,应该相当于订阅新闻之类的...
  • 比如:QQ号码属于选号式商品,可能会有多个人同时选中同1个QQ号,但只有最先付款的人会得到这个QQ号(商城自动发号), 其余未处理的订单会自动取消该QQ号码。即使其他人通过邮局汇款等非实时到账的付款方式付款...
  • - 只要你自己不在群里发消息,这个群理论上是不算存在的,别人也就无从发现。 - 检测完,一旦你自己退出群聊或者删除群,此群就算解散了,所以不会留下痕迹。 手机端也能收到被撤回的消息 如果Mac拦截到A发送来的...
  • 脉动论坛Ⅲ.rar

    2019-08-30 05:54:48
    17.发贴可以自动发短信通知想要引起注意的人(带后台开关,并且可以选择好友功能) 18.文本框的美化,增加立体感 19.限制了最少发贴数,防止疯狂灌水贴 20.记录用户总在线时间,充分客观显示用户在线率的高低 21....
  • 3. 在登录未完成时,不接收消息。 Version 2.6 (2008-7-27) 1. 登录中的未知字节用0填充,原来是用随机数。 2. 根据文档,进一步完善登录协议,但还是没有解决验证码的出现问题。 Version 2.5 (2008-7-26) 1. 修正...
  • 2008-10-28增加发消息时表情选择 2008-11-19增加好友列表图标 2008-11-25修改左侧栏、左侧列表指针显示为默认箭头,用户登录后自动删除1周前所有聊天消息 2009-1-4 增加鱼鱼应用 2009-1-19 增加聊天窗口图标 2009-4-...
  • 聚生网管2.11破解版P2P

    2010-07-18 23:56:51
    就可以完全控制,此后QQ所发出的全部报文都会被拦截,发送消息会显示“发送消息失败,是否重试”等等,这样就会迫使QQ下线,其他聊天工具截获原理同QQ一样。 14.为什么我控制了对方进行http和ftp下载,但是对方仍旧...
  • 聚生网管 - 限制网速

    2009-08-18 17:54:25
    就可以完全控制,此后QQ所发出的全部报文都会被拦截,发送消息会显示“发送消息失败,是否重试”等等,这样就会迫使QQ下线,其他聊天工具截获原理同QQ一样。 14.为什么我控制了对方进行http和ftp下载,但是对方仍旧...
  •  系统支持站内短消息,站内短信功能非常实用,商城用户可以与管理员通过互站内短信沟通和联系,有利于与用户的近一步沟通。 十八、完善的广告管理形式  系统的广告管理位很多,所有广告图片内容均可以直接...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    这个是IOCP远程控制软件的模型,服务端运行后会自动发送本机信息到客户端,客户端采用IOCP重叠机制。 IOCP封装类(DLL)发布 主要是CIocpSrv"伪类",实际上还是调用的DLL, IOCP完成端口 [1]---选择 - Select [2]异步...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

qq怎么自动发消息