利用webQQ实现聊天机器人。。

本文介绍了一个基于WebQQ的聊天机器人项目实现,通过整合多个模块如登录、消息处理、回复等功能,实现了自动化的聊天交互。该项目利用Simsimi API提供智能回复,并详细展示了各个组件的工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2014/06/29修改

重写代码=。=,,

去掉大部分不必要的模块。。。


模块:WebQQRobot

用法:传入QQ, 密码, 调用server()函数即可。。。

各模块的地址:

WebQQLogin.py, Queryable.py:http://blog.youkuaiyun.com/qq506657335/article/details/20801793

Sender.py(一部分):http://blog.youkuaiyun.com/qq506657335/article/details/20805155

Simsimi.py:http://blog.youkuaiyun.com/qq506657335/article/details/18922849

PollMsg.py:http://blog.youkuaiyun.com/qq506657335/article/details/20804353


WebQQRobot.py

#coding=utf-8

import sys;
from PollMsg import PollMsg;
from Sender import Sender;
from Simsimi import Simsimi;
from WebQQLogin import WebQQLogin;
from Queryable import Queryable;

class WebQQRobot(Queryable):
    def __init__(self, robot = None):
        Queryable.__init__(self, {
            "robot":robot == None and Simsimi() or robot,
        });
        
    def __callback(self, ret):
        if(ret["retcode"] == 0):
            poll_type = ret["result"][0]["poll_type"];
            result = ret["result"][0];
            if(poll_type == "message"): #好友消息
                self.sendMsg(result["value"]["from_uin"], self.queryInfo("robot").ask(result["value"]["content"][1]));
                
            elif(poll_type == "group_message"):
                pass;#不处理群消息
                
            elif(poll_type == "buddies_status_change"):#好友状态更新
                pass;
                
            elif(poll_type == "kick_message"):
                sys.exit(-1);
                
        elif(ret["retcode"] == 102):  #没消息
            pass;
            
        elif(ret["retcode"] == 116):  #ptwebqq的值需要更新
            self.queryInfo("poller").setQuery("ptwebqq", ret["p"]);
            
        else:
            print(ret);#debug
        
    def serve(self, id, psw):
        webQQ = WebQQLogin();
        dict = webQQ.login(id, psw);
        if(dict != None):
            self.setQueryEx({
                "sender":Sender(dict),
                "poller":PollMsg(dict),
            });
            self.queryInfo("poller").poll(self.__callback);

    def sendMsg(self, uin, msg, type = "friend"):
        return self.queryInfo("sender").send(uin, msg, type);
        
def main():
    robot = WebQQRobot();
    robot.serve("1234567", "xxxx");

if(__name__ == "__main__"):
    main();

Sender.py

#coding=utf-8

from AbstractSender import AbstractSender;
from Queryable import Queryable;
from FriendSender import FriendSender;
from GroupSender import GroupSender;
from DiscussSender import DiscussSender;

typeList = ["friend", "group", "discuss"];

class Sender(Queryable):
    def __init__(self, dict):
        Queryable.__init__(self, {
            "friend":FriendSender(dict), 
            "group":GroupSender(dict), 
            "discuss":DiscussSender(dict)
        });
        
    def send(self, uin, msg, type):
        if(self.find(type)):
            return self.queryInfo(type).send(uin, msg);
        return False;
            
        





#-------------------------------------------------------------(分割线, 下面内容已失效)-------------------------------------------------------------------------------------------------

QQRobot.py

import webQQLogin;
import getInfo;
import getMsg;
import sendMsg;
import simsimiWeb;
import time;

class QQRobot():
    def __init__(self, user, psw):
        self._webQQ = webQQLogin.webQQ(user, psw);
        self._simsimi = simsimiWeb.simsimiWeb();
        
    def _msgCircle(self):
        self._msgGet = getMsg.getMsg(self._webQQ);
        self._msgGet.get();
        
    def _getInfo(self):
        self._info = getInfo.getInfo(self._webQQ);
        self._info.getAllInfo();
        
    def _setMsgSender(self):
        self._sender = sendMsg.sendMsg(self._webQQ);
        
    def _get(self):
        if(self._msgGet.hasMsg()):
            return self._msgGet.popOneMsg();
        return None, None;
        
    def _ask(self, word):
        return self._simsimi.ask(word);
        
    def _send(self, uin, word):
        self._sender.send(uin, word);
        
    def _processMsg(self):
        while(1):
            uin, msg = self._get();
            if(uin != None and msg != None):
                answer = self._ask(msg[1]);
                self._send(uin, answer);
            time.sleep(3);
        
    def server(self):
        self._login();
        self._processMsg();
        
        
    def _login(self):
        self._webQQ.login();
        self._msgCircle();
        self._getInfo();
        self._setMsgSender();
        
def main():
    robot = QQRobot("1578263421", "xxxx");
    robot.server();
    
if(__name__ == "__main__"):
    main();

测试时的截图。。。





版本更新信息: v2.3.1 * 修复主程序一些dll出错问题 * 修复摇一摇插件和签到插件内存出错问题 * 修正小i插件停止后不能打开问题 * 修正免费打电话插件失效问题 * 修正一些小问题 * 替换目录图片,可以更改软件皮肤 v2.3 * 美化界面 * 增加提示文字说明,使用更简单了 * 解决各插件和智能聊天小i插件的冲突 * 替换掉小i信息中的“小i” * 更新签到插件,增加等级内容 * 增加远程管理QQ,方便远程控制各功能 v2.2 * 开放发图片功能 * 对界面调整 * 运行发现问题自动结束退出,包括离线了,别挤下线了,无法获取群聊天QQ号码等 * 增加定时群发送各好友或QQ群信息 * 小i插件,聊天前面要加“!” v2.1 * 修复好友列表不能获取问题 * 增加防止刷屏问题(同一个QQ发同样信息,机器人忽略) * 修改小黄鸡和小i两个插件,聊天前面要加@ * 修改打电话插件,改变打电话格式和提示 * 优化部分代码 * 修正小部分bug v2.0 * 重新构架软件结构,采用插件方式 * 修正踢人失效问题 v1.83 * 修复网站变更引起软件不能运行的问题 v1.82 * 可以对一些群设置不回复 * 可以让加群验证密码才通过 * 修复黑名单数据bug * 踢人,退群等加入黑名单 * 把黑名单数据写到文件 v1.81 * 增加不自动回复的QQ群号 * 被踢出QQ群的QQ临时加到 黑名单数据 * 签到失败时提示 * 远程踢人 v1.70 * 增加云词库 v1.61 * 自动踢广告 * 签到功能 注意:请不要把本软件用于商业。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值