GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

pandolia

qqbot – QQBot:TencentのSmartQQの会話ロボットベース

投稿日:

QQBot:TencentのSmartQQの会話ロボットベース

一、介绍

qqbotは、Linux、Windows、Mac OSXで実行可能なSmartQQの通信をサポートします。

本物語github住所: https : //github.com/pandolia/qqbot

あなたは、

  • 监控、收集QQ消息
  • 自発消息を送信する
  • 聊天机器人
  • QQ遠隔操作控え设备

二、安装方法

Python 2.7 / 3.4以降で使用するため、ピンプルインストール:

pip install qqbot

またはソースコードをダウンロードしてください: pip install

三、使用方法

1.启动QQBot

QQBot 、QQBot、即時実行。

QQbot -qqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqここで、 qqbot -q qqの値は 、元の文章の中には、2つの不完全な情報が含まれていることがあります。之後过期。

注意:Linux下では、必要な系統はgvfs-openまたはgun shotwellコマンドを実行してください。一般的なインストールはGNOMEで実行されています。Windows10下、需要系统中设定了PNG图像象术开始程序才能自动开放二维码写真。

あなたのシステムは、あなたのコンピュータ上で動作するように設計されています。あなたは、あなたのコンピュータ上で動作するように設計されています。

2.操作QQBot

QQBotを使用してQQBotを実行すると、QQBotは次のように表示されます。

1) 帮助、停机和重启命令

    qq help|stop|restart|fresh-restart


2) 联系人查询、搜索命令

    qq list buddy|group|discuss [$cinfo|$clike]
    ( $cinfo --> $qq|$name|$key=$val )
    ( $clike --> :like:$qq|:like:$name|$key:like:$name )

    qq list group-member|discuss-member $oinfo|$olike [$cinfo|$clike]
    ( $oinfo --> $oqq|$oname|$okey=$oval )
    ( $cinfo --> $qq|$name|$key=$val )
    ( $olike --> :like:$oqq|:like:$oname|$okey:like:$oname )
    ( $clike --> :like:$qq|:like:$name|$key:like:$name )


3) 联系人更新命令

    qq update buddy|group|discuss

    qq update group-member|discuss-member $ginfo


4) 消息发送命令

    qq send buddy|group|discuss $rinfo $message


5) 加载/卸载/显示插件

    qq plug/unplug myplugin

    qq plugins

リスト命令を提供する强大的联系人查询および検索機能、用法例など:

# 列出所有好友
qq list buddy

# 列出 名称 为 xxx 的群
qq list group xxx

# 列出备注名为 jack 的好友
qq list buddy mark=jack

# 列出 群“456班” 的所有成员
qq list group-member 456班

# 列出 群“456班” 中名片为 “mike” 的成员
qq list group-member 456班 card=mike

# 列出 讨论组“XX小组” 中名为 jack 的好友
qq list discuss-member XX小组 jack

それは、あなたのカードがあなたのカードの中にあるかどうかを判断するために使用されます。 QQ进行查询、否定、按名进行查询。

どのように重複しているか、重複しているか、

qq list group 机器人测试

“机器测试”的群。

“:like:”、规则按分匹順模式进行搜索、用法例など:

# 列出名称中含有 “李” 的好友
qq list buddy :like:李

# 列出 QQ 中含有 “234” 的群
qq list group :like:234

# 列出备注名中含有 jack 的好友
qq list buddy mark:like:jack

# 列出 群“456班” 的中名称中含有 “李” 的成员
qq list group-member 456班 :like:李

# 列出 群“456班” 中名片中含有 “mike” 的成员
qq list group-member 456班 card:like:mike

# 列出的 讨论组“xx小组” 中名为 jack 的好友
qq list discuss-member :like:小组 jack

v2.2.5の冒頭に記載されている形式を使用して、

看板は、最終的に中立的な表示效果、建造物の最終的な出力デザインの文字列、恒例の行頭記号で囲まれた最大文字数を120とする。等身的な長さのものであるか、または特殊なものであるかを問わず、これらに限定されるものではありません。

updateコマンドを実行すると、

# 更新好友列表
qq update buddy

# 更新群列表
qq update group

# 更新 群“456班” 的成员列表
qq update group-member 456班

命令を送信してください、あなたの命令を送信してください、あなたの意見を聞いて、あなたの意見を共有してください。 buddy / group / discuss、不能是group-member / discuss-member例:

# 给 好友“jack” 发消息 “你好”
qq send buddy jack 你好

# 给 群“198班” 发消息 “大家好”
qq send group 198班 大家好

# 给 QQ 为 12345 的好友发消息
qq send buddy 12345 xxx

# 给讨论组发消息
qq send discuss MyDiscuss hello

可能な消息内容中 “/可愛”などの表情关系词、方向 表向きの字句(どんな:バディージャックを送る)第一行\ n第二行)。

HTTP APIを使用してHTTP APIを提供するには、 http: //www.windowsfiles.jpを参照してください。別の例をurltestbot.mdに置き換えてください 。注意:他の例は urltestbot.mdを参照してください 。注意:中文中文または特殊字符、要要先行行url编码(utf8)、例如、调用http://127.0.0.1:8188/send/buddy/jack/nihao%20%E4%BD%A0%E5%A5%BD%20wohao将發送信消息 ” nihao你好wohao “(提示:JavaScriptの中で、encodeURIComponent函数进行编码)。

QQBotは、QQBotに対応しています。QQBotは、QQBotに対応しています。 -v2.xx “となります。

四、实现你自己的QQ机器人

QQ机器は非常に簡単で、要求を満たすためには、

# -*- coding: utf-8 -*-

def onQQMessage(bot, contact, member, content):
    if content == '-hello':
        bot.SendTo(contact, '你好,我是QQ机器人')
    elif content == '-stop':
        bot.SendTo(contact, 'QQ机器人已关闭')
        bot.Stop()

“onQQMessage”、关数数、必須または必須の标准。

サンプル以上のファイルを保存するには、sample.py(メモ帳)を使用してください。/ / .qqbot-tmp / plugins /目印下に置いてください。 Lib / site-packages目录にあるように、何らかの形でファイルをインストールする必要があります。

QQプラグインのサンプルでは、​​QQBotを使用する前に、QQプラグインを使用して、 こんにちは “QQ机器、” QQ机器 “ 、QQ机器。

サンプルをインストールすると、サンプルのインストールが解除され、それに対応するコマンドが実行されます。複数のプラグインを同時に使用する場合は、それぞれのプラグインを個別に使用する必要があります。

QQBot开始运行後、QQ消息、会议消息所源、消息内容QQBot对象传递给典请点的消息应用数其中:

bot     : QQBot 对象,提供 List/SendTo/Stop/Restart 等接口,详见本文档第五节
contact : QContact 对象,消息的发送者,具有 ctype/qq/uin/nick/mark/card/name 等属性
member  : QContact 对象,仅当本消息为 群消息或讨论组消息 时有效,代表实际发消息的成员
content : str 对象,消息内容

contact代表消息发送者、其ctype属性可为buddy / group / discuss 、代表好友/群/討論グループ对象、表示消息是好友消息/群消息/討論構成消息。

group-member / discuss-member 、代表group-member / discuss-member group-member拒否。当然の消息拒否メンバー消息时、会員等于なし。

QContactオブジェクト、QContact オブジェクトオブジェクト 、QContactオブジェクトオブジェクト、QContactオブジェクトオブジェクト、QContactオブジェクトオブジェクト、QContactオブジェクトオブジェクト、QContactオブジェクトオブジェクト、QContactオブジェクトオブジェクト、QContactオブジェクトオブジェクト、QContactオブジェクトオブジェクトそれには追加的な性質がある。

使用可能なQQBot象徴的なSendTo接頭方向QContact对象发表离消、 请可为向好友/群/讨论组反映、 不可順向群成員/讨论组成员发送消息 。也就是说、 许可调用 bot。 SendTo(連絡先、 ‘xxx’)、不可能なbot.SendTo(メンバー、 ‘xxx’)。

五、QQBotオブジェクトの物理的な接続とプロパティ

QQBot提供されるリスト/更新/送信/プラグ/抜き差し/ログイン/停止/再起動/ FreshRestart共に9つの公的な接続がある場合、公式の設定情報を提供する。 。

一般的な情報の下では、请得调用/存取此の象徴的な他の方法/属性。特徴的、 子线系中调用这些接头。

IDEまたはpython-shellの中の任意のものは、IDEまたはpython-shellの中に存在している必要がありますか?

>>> from qqbot import _bot as bot
>>> bot.Login(['-q', '1234'])

(1)bot.List(tinfo、[cinfo]) – > [contact0、contact1、…] / [] / None

(QContactオブジェクト)列挙または何もなし。列挙または列挙されていない列挙的な列挙的な代理、第2引数参入格式一致)。

パラメータの説明は次のとおりです。基本的な情報は次のとおりです

(例:1):兄弟/ group / discuss 、分別代表好友列表/群列表/討論構成列表。例:

# 返回 好友列表:
>>> bot.List('buddy')

# 返回名为 'jack' 的好友的列表:
>>> bot.List('buddy', 'jack')

# 返回 群列表:
>>> bot.List('group')

# 返回名为 “机器人测试” 的群的列表:
>>> bot.List('group', '机器人测试')

あなたの所属するgroup discuss QContact对象、代表団/讨论组的成员列表。第二句と第三句を分別返回群 “456班”的会員列席と兄の中の名詞句 “jack”的成員列表:

>>> g = bot.List('group', "456班")[0]   # g 是一个 Group 对象(群“456班”)
>>> bot.List(g)                         # 返回 群“456班” 的成员列表
>>> bot.List(g, 'card=jack')            # 返回 群“456班” 中名片为 “jack” 的成员列表

(g、card = ‘jack’)的格式。

リスト内の内部執行手順: QQBotの連絡先内のQQBotの連絡先を調べるには、以下のいずれかの方法を使用してください: QQ服务器请求数据载取说系说系说系记系人说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系说系系QQ服务家请求数过程中出离了则打书关系失败报告、复返回なし。

リスト内の空白のリストを表示するには、空白のリストを表示する必要があります。向こうQQ服务器请求说系统系表情报失败、不知道是否相對配的联系人。

调用后后、 环境问题

注意:連絡先の返信非空気列表記、列表内の要素QContactオブジェクト、

>>> g = bot.List('group')[0]   				# g 是一个 Group 对象
>>> print([g, type(g), g.qq, g.name, g.uin, g.mark])	# 打印 g 的各项属性

QContact对象所具有的な属性を含む: qcontact-attr

(2)bot.Update(tinfo) – >真/偽

更新する必要がありますか?更新する必要がありますか?更新する必要がありますか?更新する必要がありますか?更新する必要がありますか?更新する必要がありますか?好友较多可能会妨塞5〜10秒。成績列表更新、即便是2000人的大群、更新时间仅1〜2秒。

若い更新成功、返回True、否定、返回False。

例:

# 更新 好友列表 :
>>> bot.Update('buddy')

# 更新 群列表 :
>>> bot.Update('group')

# 更新 某个群的成员列表 :
>>> gl = bot.List('group', "456班")
>>> if gl:
>>>     g = gl[0]
>>>     bot.Update(g)

(3)bot.SendTo(contact、content、resendOn1202 = True) – > ‘方向xx发浸息成功’ / ‘错误:…’

あなたの意見や感想を教えてください:自分の意見や感想を教えてください:自分のレビューを作成する>あなたの意見や感想を教えてください: 自分のレビューを作成する>カスタマーレビューを見るカスタマーレビューの検索この商品のカスタマーレビューだけを検索する

可能な消息内容中 “/微笑”等表情关系 。向向發表表情、 facemap.py

若發送成功、返尾字符串( 向 xx 发消息成功 )。否定、返回含错誤原因的文字符串(错误错误:... )。

QQサービスの返信代理人1202原因.v2.1.17版で問題が発生しました.SendTo接頭部中の一件:resendOn1202、若干の参加者True(默认值) 、QQ服务再返代码1202(表明发照可能失敗)、返送依頼3次、直前返回代0、若者参加者False、则不会尝重。

本当に不幸なことはありませんでしたが、あなたは本当に不幸なことをしていませんでした。

1202代理の不確定性、没有完璧な解決诉法。请有责任各的实在情况选择resendOn1202的な値。

第1のパラメータは、あなたに連絡する必要があります。リストに戻るQContactオブジェクト、またはQQMessageコマンドを送信します。例:

# 向 昵称 为 jack 的好友发消息
>>> bl = bot.List('buddy', 'jack')
>>> if bl:
>>>     b = bl[0]
>>>     bot.SendTo(b, 'hello')

(4)bot.conf

bot.conf.termServerPortはQQBotコマンドを格納しています。bot.conf.qqは、このQQ番号を保存しています。

注意:bot.confは、保存に必要な設定情報がありません。

六、记录回复关数、被雇用者、決定是否是自己发的消息、定制时时任务

注釈回帰数

onTQMessageには、オンチップ/オンチップ/オンスタートコンプリート/オンインタバル/オンアップデート/オンプラグ/オンユニバーグ/オンオフコンビネーションコンプライアンスパラメータが含まれており、サンプルスロットを含む。 py

習慣的な運行の流れとそれに続く回帰の数学的な調整の使用例など:

注釈を付けて返す序数名と序数パラメータ(数量と名称)都不得更

被群内其他成員@的通知

QQBot收到群消息时间、会议根愿消息内容判断是否有人@自己、消失情报开発项目[@ME]标准、问题。 @ME変更@Me再提供は、 @ME上で、 @Me内部では、コンテンツの内容を変更することができます@ME就職道を@ME @

def onQQMessage(bot, contact, member, content):
    if '@ME' in content:
        bot.SendTo(contact, member.name+',艾特我干嘛呢?')

注意してください、若いグループ内の有力なメンバーの名字と自己の名字的な枢機卿との間の関係(自己:名字是ab、另一个人的名字是abc)、那么当有人@abc时、也会误报成@ME、修復自己の族の名前は、以下のとおりです。

判断是否是自己发的消息

当QQ发火时间、QQBotの会合は一斉に消滅する、ボトムズ提供は一貫している方法はありますか?

def onQQMessage(bot, contact, member, content):
    if bot.isMe(contact, member):
    print('This is me')

定制定時任務

2.1.13起、qqbot提供する一人の功能强大个数装饰器 – qqbotsched来る定制執行、例书:

from qqbot import qqbotsched

@qqbotsched(hour='11,17', minute='55')
def mytask(bot):
    gl = bot.List('group', '456班')
    if gl is not None:
        for group in gl:
            bot.SendTo(group, '同志们:开饭啦啦啦啦啦啦!!!')

以上代入以後插件形式昇载、后11:55、および17:55、都会自移動向群 “456进”、 “同志们:开始啦啦啦啦啦啦!!!”。

qqbotsched装饰器接頭年、月、日、曜日、日、週、時、分、秒、開始日、終了日、タイムゾーン時間= ’11、17 ‘表示应用11:xx或17:xx執行任務、分= ’55’表示xx:55执行任务、分= ‘0-55 / 5’表示xx:00、 xx:05、xx:10、…、xx:55執行任務、day_of_week = ‘mon-fri’(または ‘0-4’)表示应在星期一〜星期执行任务。

qqbotsched¶对Python的に設定されているものは、apschedulerを使って簡単に設定することができます。その他の設定は、Unix系のcrontab形式で行うことができます。

crontab各項目の参入者数式記述詳細:

注釈回帰函数と定規定時任務的注意事項

QQBot進歩的な唯一の方法、現時点での修正、

  • パラメータ名、パラメータ名、パラメータ数、パラメータの順不同の変更
  • QQBotの象徴である。
  • それは、あなたのコンピュータ上で実行されていることを意味します。
  • 回帰函数と定時執行运行时间应用程度、尽量不要复数项中进行禁止为的操作、否定的な会议妨塞复程的运行行为个人的运行时间。 。
  • それ以外の場合は、QQコマンドを実行してください。QQコマンドを使用して、 API接続 、否定整理手順形成破滅(SendTo / List等を使用してください。接続。

七、二维码管理器、QQBot配置、命令行参数以降の作業目録

二维码的显示模式

WebQQ QQBot中にあるQQ掃引二次元コードの画像を表示するには、QQBot中に二次元コードを表示する:

  • GUIモデル:GUIインタフェース中に自在弹出二维码图片
  • 邮箱模式:将二维码图片发送到指定的邮箱
  • 服务器模式:HTTP服务器中显示二维码图片
  • 文本模式:期中以文本形式展示二维码(需要自行安装枕とwcwidth库)

GUI模型は、擬似的に使用することができます。郵便箱には、郵便番号と郵便番号が書かれています。郵便箱には、郵便番号と郵便番号が書かれています。二重码写真は、後でQQの顧客の端の会合はすぐに、 QQを提供する者。

注意:それは、邮便箱模型/服务器模式/文本模型时、GUI模倣关系、登场时空动作复出二维码写真。

(QrcodeManagerオブジェクト)、二重管理机构基设配置文书および命令行进行选択二基码図的表示方法。

ファイルの使用方法の設定

QQBot-tmp / v2.x.confを配置する〜の 基本的な目次目次、次のC:\ Users \ xxx、linux下位/ home / xxx)、第一次行運QQBot后就会自动其中内容など:

{

    # QQBot 的配置文件
    # 使用 qqbot -u somebody 启动程序时,依次加载:
    #     根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
    # 使用 qqbot 启动程序时,依次加载:
    #     根配置 -> 默认配置 -> 命令行参数配置
    
    # 用户 somebody 的配置
    "somebody" : {
        
        # QQBot-term (HTTP-API) 服务器端口号(该服务器监听 IP 为 127.0.0.1 )
        # 设置为 0 则不会开启本服务器(此时 qq 命令和 HTTP-API 接口都无法使用)。
        "termServerPort" : 8188,
        
        # 二维码 http 服务器 ip,请设置为公网 ip 或空字符串
        "httpServerIP" : "",
        
        # 二维码 http 服务器端口号
        "httpServerPort" : 8189,
        
        # 自动登录的 QQ 号
        "qq" : "3497303033",
        
        # 接收二维码图片的邮箱账号
        "mailAccount" : "3497303033@qq.com",
        
        # 该邮箱的 IMAP/SMTP 服务授权码
        "mailAuthCode" : "feregfgftrasdsew",
        
        # 是否以文本模式显示二维码
        "cmdQrcode" : False,
    
        # 显示/关闭调试信息
        "debug" : False,

        # QQBot 掉线后自动重启
        "restartOnOffline" : False,
        
        # 在后台运行 qqbot ( daemon 模式)
        "daemon": False,
        
        # 完成全部联系人列表获取之后才启动 QQBot 
        "startAfterFetch" : False,
        
        # 插件目录
        "pluginPath" : ".",
        
        # 启动时需加载的插件
        "plugins" : [],
        
        # 插件的配置(由用户自定义)
        "pluginsConf" : {},
    
    },
    
    # 可以在 默认配置 中配置所有用户都通用的设置
    "默认配置" : {
        "qq" : "",
        "pluginPath" : "",
        "plugins" : [
            'qqbot.plugins.sampleslots',
            'qqbot.plugins.schedrestart',
        ],
        "pluginsConf" : {
            'qqbot.plugins.schedrestart': '8:00',
        }
    },
    
    # # 注意:根配置是固定的,用户无法修改(在本文件中修改根配置不会生效)
    # "根配置" : {
    #     "termServerPort" : 8188,
    #     "httpServerIP" : "",
    #     "httpServerPort" : 8189,
    #     "qq" : "",
    #     "mailAccount" : "",
    #     "mailAuthCode" : "",
    #     "cmdQrcode" : False,
    #     "debug" : False,
    #     "restartOnOffline" : False,
    #     "daemon" : False,
    #     "startAfterFetch" : False,
    #     "pluginPath" : "",
    #     "plugins" : [],
    #     "pluginsConf" : {}
    # },

}

自由な配置の文脈の中にあなたの個人的な構成を追加する、QQBot运行、 誰か 、QQBot输入QQBot – 誰 、则会加载somebody项目下の各項目配置。

下位に配置配置の中では、下位の配置、下位の配置、下位の配置などがあります。

邮箱模式的配置(mailAccountとmailAuthCode)

使用可能な郵便箱形式を使用して、使用可能な郵便番号とmailAuthCodeの内容を別々の郵便箱に保管し、運送後、2つの郵便管理装置を2つの郵便配達郵便で送ることができます。

注意: IMAP / SMTPサービスを提供するサービスを提供するPOP3 / SMTPサービス、QQ /网易邮箱は、邮便邮便、邮是、邮便、邮便、邮便、邮便、邮便、服务、授権授権码。mailAuthCode、则程序业务开始要求手工作输入此方诉权码。

QQ、邮箱模型、Google邮箱中测试过。

服务器模式的配置(httpServerIPとhttpServerPort)

{httpServerIP}:{httpServerPort} / {any}来客二重码图片。任意の空文字または字母串。

当邮箱模型と服务器模式时间开发时、邮政时代现在现在图片、地方发送邮便中、维新时代刷新一一邮件就可了。开封邮箱模式、则发邮件时间现在现状的现在的现在的现在的现在的现在的现在的现在的二维码图片。

文本模式圖示二维码(cmdQrcode)

若干cmdQrcodeのプロダクトは真であり、期間中の規則の下で規則的に使用されています。注意:必要な使用のためのモデル、必要なものはパッケージ内にあります。

自动登录的QQ号码(qq)

QQファイルには、QQ番号、QQ番号、QQ番号、QQ番号、QQ番号、QQ番号、QQ番号、QQ番号が格納されています。

掉线後自動重启(restartOnOffline)

任意のQQBotまたはQQBotを使用して、QQBotを再起動する必要があります。

qqbot(デーモン)

UNIXシステム内のUNIXシステムでは、デーモンの擬似的な設定が真の慣習からデーモン模範になります。デーモン – $ qq.logファイル(中核$ qq设置中qq选项値)。

開始後の再遂行(startAfterFetch)

QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、QQBot、 QQBot)注意してください、催事完了後の才能、注意、それに応じて、随時お問い合わせください、会合费用较长的间间。

QQBot-term服务器口口号(termServerPort)

QQBotの有効期限が切れている、QQBot-termサービスプロバイダがQQBot-termサービスを実行する前にHTTP APIを使用して操作を実行している場合は、 8188、可过过过修复termServerPort値は修改此端口号。

QQBot-term服務者口座番号は、8188、

$ qq 8100 send buddy jack hello
$ qq 8100 list group-member chatbot

HTTP APIに接続するためには、 http ://127.0.0.1:8100/send/buddy/jack/helloにアクセスしてください。

QQBot-termサービスを使用してHTTP-APIを使用する場合は、QQBot-termサービスを使用する必要はありません。

QQ番号は、QQ番号に対応していますが、QQ番号は、QQ番号に対応しています。QQBotは、值)、否定会造成口口冲突。

调试模式(デバッグ)

若干のデバッグプロダクトTrue、则运行过程中中断。

插入的配置(pluginPathとプラグイン)

一般的な情報の下で、プラグインの設定を他の環境変数に設定することはできません。また、プラグインの設定を変更することもできます。插件。

命令行配置と配置上の優位性

ファイルを配置することは、ファイルの中に配置することはできません。ファイルを配置することは、ファイル内のファイルを読み込むことによって実行されます。

手順1:共有、別の配置、

使用 qqbot -u somebody 启动程序时,依次加载:
    根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置

使用 qqbot 启动程序时,依次加载:
    根配置 -> 默认配置 -> 命令行参数配置

あなたは、v2.x.confファイルの中で実行可能な変更を行うことができます。

工作目録

qqbot运行时间、会计工务目标/创建条件/目录:

  • ファイルの配置:v2.x.conf
  • プラグイン/
  • ファイル名:v2.x-pyx-xxxx.pickle
  • 連絡先:2017-05-06-20-03-12-xxxx-contact.db
  • 临时二维码写真:xxxx.png
  • 保存QQ的文件: qq(pid9816)
  • 以 daemon 模式运行时的 log 文件: daemon-xxx.log

默认的工作目录为 ~/.qqbot-tmp/ ,可以在启动 qqbot 时通过命令行参数 -b|–bench 指定其他工作目录,例如: qqbot -b bench 。

八、 插件

插件的存放位置

插件实际上是一个 python 模块,因此可以是一个 python 文件,也可以是一个 python package。 qqbot 会根据插件名在以下目录中搜索插件:

  • 配置中的 pluginPath 选项(命令行参数 -pp|–pluginPath )指定的目录
  • 工作目录下的 plugins 目录
  • python 的导入目录

插件的加载/卸载

hot-plug 方式

可以在 qqbot 的运行过程中动态的加载/卸载插件,有以下三种方法:

前面两种方法是供 qqbot 进程的外部进程调用的,第三种方法是在 qqbot 进程内部使用的。请勿在 qqbot 进程的内部使用前面两种方法。

注意:采用 hot-plug 方式加载的插件在 qqbot 重启后会丢失。

auto-plug-at-start 方式

也可以在 qqbot 的启动时自动加载插件,在配置中的 plugins 选项(命令行参数 -pl|–plugins )中指定需要加载的插件名就可以了。这些插件将在启动时、登录之前被加载。

另外,如果系统中(或插件目录中)存在名为qqbotdefault的 package ,那么该 package 下面的所有子模块都会被当成插件在启动时自动加载(注意:qqbotdefault 本身不会作为插件加载)。

插件内的 onPlug 和 onUnplug 回调函数

  • 插件被加载时,会执行 reload(pluginName) ,因此插件内的所有代码都会被执行一次
  • 当采用 hot-plug 的方式加载时,插件内的 onPlug 函数会紧接在 reload 成功后被执行
  • 当采用 auto-plug-at-start 方式加载时,插件在启动时、登录之前被加载,但插件内的 onPlug 函数会延迟到登录成功后才被执行
  • 插件被卸载时,插件内的 onUnplug 被执行

插件的编写

编写插件主要就是编写回调函数或定时任务函数,详见第四~六节

插件列表

名称 github作者 功能说明 是否默认加载
qqbot.plugins.sampleslots pandolia 回调函数示例
qqbot.plugins.schedrestart pandolia 定时重启
qqbot.plugins.miniirc pandolia IRC服务器
passwordlogin pandolia 使用用户名-密码登录
広告ブロック feisuweb 群广告拦截
chatlog feisuweb 聊天内容记录

如果您有好用的插件分享,欢迎发邮件给我。

九、 命令行模式下使用 IRC 聊天

linux 系统下,由于无法使用 QQ 客户端,可以使用插件 qqbot.plugins.miniirc 来实现用 IRC 聊天的功能。加载方式: qq plug qqbot.plugins.miniirc ,或启动时加载: qqbot -pl qqbot.plugins.miniirc ,或者在配置文件中的 plugins 选项中加入qqbot.plugins.miniirc

插件加载后将在 6667 端口开启一个微型的 IRC 服务器,用户可以使用 IRC 客户端(如 weechat, irssi 等)连接此服务器来实现命令行模式下的聊天。以下以 weechat 为例介绍使用方法:

启动 weechat : weechat

连接本服务器: /connect localhost

进入 群聊天 会话: /join group-name

进入 讨论组聊天 会话: /join !discuss-name

进入 好友聊天 会话: /query buddy-name

进入 聊天会话 后,直接敲入文本并回车就可以向对方发送消息了。所有接收到的 QQ 消息也会被转发给相应的 聊天会话 。

在聊天会话之间切换: ctrl+P 或 ctrl+N

显示所有 群和讨论组 的名称: /list

以上几乎就是此微型 IRC 服务器所提供的所有功能了,但已经足够用来和 QQ 好友/群/讨论组 聊天了。

十、 smartqq 协议支持及限制

本项目已实现绝大部分 smartqq 协议支持的功能,如下:

  • 消息收/发
  • 联系人(包括 好友/群/讨论组/群成员/讨论组成员)资料获取和查询(包括 昵称/名称/备注名)
  • 联系人资料根据需要动态更新
  • 被群内其他成员 @ 的通知
  • 发送、接收表情(详见facemap.py
  • 可以获取到自身发送的 好友/群/讨论组 消息。但若是自身发送的 好友 消息,只能获取消息文本,无法知道该消息发送给谁。

其他功能:

  • 调用系统默认图片浏览器显示登录二维码、将登录二维码发送至邮箱、开启一个 http 服务器用来显示登录二维码、在命令行窗口使用文本模式显示二维码
  • 用 qq 命令行工具发消息、查询|更新联系人
  • 提供 HTTP-API 接口发消息、查询|更新联系人
  • 提供 miniirc 插件,可以在命令行模式下使用 IRC 客户端聊天
  • 掉线后自动重启功能(有时需要手工扫码)
  • 定时执行任务(通过 qqbotsched 实现)

因 smartqq 协议的限制,以下问题尚无完美的解决方法:

  • 无法长时间保持在线状态,每次登录成功后的 cookie 会每在 1 ~ 2 天后失效,将被腾讯服务器强制下线,此时必须重新登录。可以打开邮箱模式和自动重启模式,并配合 qqbot.plugins.schedrestart 插件使用,每天在固定的时间手工扫码登录一次,基本上可以稳定的保持在线状态。
  • 无法发送图片、文件、音频、 xml 卡片消息
  • 无法获取到联系人的实际 QQ
  • 无法在群内 @ 其他成员,即便用本程序在群里发送了 “@jack xxx” 这样的消息, jack 也只能收到这个纯文本,收不到“有人@我”的提醒。
  • 无法向 群/讨论组 内的其他非好友成员发消息,也无法收到非好友成员发过来的临时会话消息
  • 在非常少的情况下,发消息时会重复发送多次,也可能对方已收到消息但返回发送失败的结果

十一、其他

十二、参考资料

QQBot 参考了以下开源项目:

在此感谢以上三位作者的无私分享,特别是感谢 ScienJus 对 SmartQQ 协议所做出的深入细致的分析。

十三、反馈

有任何问题或建议可以发邮件给我pandolia@yeah.net ,或者直接提 issue ,也可以加 QQ 群: 577126408 。但还是希望您在提问之前通读一下本文档,很有可能您想要的答案已经在文档中了。







-pandolia
-, , , , , , ,

執筆者: