qqbot は、Python で実装され、Tencent の SmartQQ プロトコルに基づいた QQ ロボットであり、Linux、Windows、および Mac OSX プラットフォームで実行できます。
このプロジェクトの github アドレス: https://github.com/pandolia/qqbot
これは、qqbot を拡張することで実行できます。
Python 2.7/3.4 以降で使用するには、pip を使用してインストールします。
pip install qqbot
または、ソース コードをダウンロードして解凍し、ディレクトリに移動してpip install
実行します。
コマンドラインに「qqbot」と入力して、QQBot を起動します。
起動プロセス中に、QR コード画像が自動的にポップアップします。モバイル QQ クライアントを使用してコードをスキャンし、ログインを認証する必要があります。正常に起動すると、ログイン情報がローカル ファイルに保存されます。次回起動するときに、次のように入力します。まず、ローカル ファイルからログイン情報を復元してみます (コードを手動でスキャンする必要はありません)。ログインが成功した場合、またはログイン情報の有効期限が切れた場合は、手動で QR コードをスキャンしてログインする必要があります。通常、保存されたログイン情報は 2 日後に期限切れになります。
注: Linux では、QR コード イメージを自動的にポップアップするには、システムで gvfs-open または Shotwell コマンドが必要です (通常、GNOME 仮想ファイル システム gvfs がインストールされているシステムには、これら 2 つのコマンドのいずれかが含まれます)。 Windows 10 では、QR コード画像が自動的にポップアップされるように、png 画像ファイルのデフォルトの開くプログラムをシステムに設定する必要があります。
システムが QR コード画像を自動的にポップアップできない場合は、手動で画像ファイルを開いてコードをスキャンするか、QR コードの表示モードをメールボックス モード、サーバー モード、またはテキスト モードに設定してコードをスキャンすることができます。この文書のセクション 7 を参照してください。
QQBot を起動したら、別のコンソール ウィンドウで qq コマンドを使用して 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
list コマンドは、強力な連絡先クエリおよび検索機能を提供します。使用例は次のとおりです。
# 列出所有好友
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
3 番目と 4 番目のパラメーターが key=val の形式である場合、name=xx|nick=xx|mark=xx|card=xx|qq=xx の形式である必要があります。 key=val, press 処理原理は次のとおりです。数字の文字列の場合は QQ 番号でクエリーし、それ以外の場合は名前でクエリーします。
重複した名前がある場合は、重複した名前を持つすべての連絡先がリストされます。のように:
qq list group 机器人测试
「Bot Test」という名前のすべてのグループがリストされます。
list コマンドの 3 番目と 4 番目のパラメータに「: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 以降、list コマンドはテーブルを使用して連絡先リストを出力します。その出力形式の例は次のとおりです。
端末での表の表示効果を確実にするために、端末の出力フォントを consolas に設定し、各行に印刷できる最大文字数を 120 より大きくすることをお勧めします。また、テーブルの表示効果を確保するために、連絡先の名前、名刺、その他の属性が長すぎる場合、または特殊文字が含まれている場合、これらの属性は端末に出力される前に切り捨てられるか、フィルター処理されます。
update コマンドは、指定された連絡先リストを更新します。そのパラメーターの意味は、次のように list コマンドの意味と同じです。
# 更新好友列表
qq update buddy
# 更新群列表
qq update group
# 更新 群“456班” 的成员列表
qq update group-member 456班
send コマンドの 3 番目のパラメーターの形式は、list コマンドの 3 番目のパラメーターと同じです。名前が重複している場合、同じ名前を持つすべての連絡先にメッセージが送信されることに注意してください。 また、2 番目のパラメータには、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
メッセージ内容に「/cute」などの顔文字キーワードを埋め込んで相手に顔文字を送信できます。詳しくはfacemap.pyをご覧ください。メッセージの内容で 2 つのエスケープ文字n と t を使用することもできます (例: send buddy jack 1 行目n 2 行目)。
上記のすべてのコマンドは、Web フロントエンド開発者が呼び出すための対応する HTTP API インターフェイスを提供します。インターフェイスの URL アドレスは http://127.0.0.1:8188/{command} です。各パラメーターに「/」を使用するだけです。 qq の後のコマンドを分離して URL 内のコマンドを置き換えます (例: http://127.0.0.1:8188/send/buddy/jack/hello)。 、他の例については、urltestbot.md を参照してください。注: コマンドに中国語または特殊文字が含まれている場合は、最初に URL エンコード (utf8) を実行する必要があります。たとえば、http://127.0.0.1:8188/send/buddy/jack/nihao%20%E4%BD% を呼び出します。 A0%E5 %A5%BD%20wohao は「nihao hello wohao」というメッセージを送信します。 (ヒント: JavaScript では、エンコードに encodeURIComponent 関数を使用できます)。
さらに、QQBot の起動後、この QQ アカウントを使用して他のクライアント (モバイル QQ など) 上のグループ/ディスカッション グループにメッセージ「--version」を送信すると、QQBot は自動的にグループ/ディスカッション グループに返信します。 「QQBot -v2.xx」。
独自の 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として保存します(utf8でエンコードされたファイルとして保存されることに注意してください)。 ~/.qqbot-tmp/plugins/ ディレクトリ ( ~はユーザーのホーム ディレクトリ、win7 では C:Usersxxx を表します)、またはシステムにインポートできるディレクトリ (Python の Lib/ など) に配置します。インストールディレクトリ) サイトパッケージディレクトリ)。
その後、前の qqbot プロセスを実行したままにして、別のコンソールに qq プラグ サンプルを入力すると、このファイル内の onQQMessage 関数を QQBot の対応するイベントに登録できます。このとき、別の QQ を使用してこの QQ に「-hello」というメッセージを送信すると、自動的に「Hello, I am a QQ robot」と応答します。「-stop」というメッセージを送信すると、QQ ロボットは「-stop」というメッセージを送信します。閉まっている。
コンソールで「qq unplug sample」と入力して、このプラグインと対応するコールバック関数をアンインストールします。複数のプラグインを同時にロードでき、各プラグインの対応する関数が順番に呼び出されます (ただし、呼び出し順序はロード順序とは関係ありません)。
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
を指定できます。これは、フレンド/グループ/ディスカッション グループ オブジェクトを表し、このメッセージがフレンド メッセージ/グループ メッセージ/ディスカッション グループ メッセージであることを示します。
member は、このメッセージがグループ メッセージまたはディスカッション グループ メッセージである場合にのみ有効で、その ctype 属性はgroup-member
member / discuss-member
になります。このメッセージがフレンド メッセージの場合、メンバーは None に相当します。
contact と member はどちらも QContact オブジェクトです。さまざまなタイプの QContact オブジェクトの属性の意味については、qcontact-attr を参照してください。すべての QContact オブジェクトは読み取り専用オブジェクトであることに注意してください。そのプロパティのみを読み取ることができ、そのプロパティを設定したり、追加のプロパティを追加したりすることはできません。
QQBot オブジェクトの SendTo インターフェイスを呼び出して QContact オブジェクトにメッセージを送信できますが、注意してください:メッセージは友人/グループ/ディスカッション グループにのみ送信でき、グループ メンバー/ディスカッション グループ メンバーには送信できません。つまり、 bot.SendTo(contact, 'xxx') のみを呼び出すことができ、 bot.SendTo(member, 'xxx') を呼び出すことはできません。
QQBot オブジェクトは、List/Update/SendTo/Plug/Unplug/Login/Stop/Restart/FreshRestart の合計 9 つのパブリック インターフェイスを提供します。これらのインターフェイスの最初の文字はすべて大文字です。さらに、グローバル構成情報を保存するために、パブリック属性 conf が提供されます。
一般に、このオブジェクトの他のメソッド/プロパティを呼び出したりアクセスしたりしないでください。特に、これらのインターフェイスを子スレッドで呼び出さないでください。 以下では、最初の 7 つのインターフェイスと conf 属性について説明します。
IDE または Python シェルで上記のインターフェイスを実行またはテストする必要がある場合は、まず qqbot プロセスを閉じ、IDE または Python シェルで次のコードを実行してログインする必要があります。
>>> from qqbot import _bot as bot
>>> bot.Login(['-q', '1234'])
このドキュメントのセクション 3 の list コマンドに対応します。連絡先オブジェクト (QContact オブジェクト) のリスト、または None を返します。最初のパラメータ tinfo は連絡先リストのコード名で、2 番目のパラメータはオプションです (形式は list コマンドの 3 番目のパラメータと同じです)。
パラメータ tinfo は、連絡先リストを表すために使用されます。このパラメータは、次の 2 つの状況を必ず理解してください。
tinfo の意味 (ケース 1): tinfo には、 buddy
/ group
/ discuss
を指定でき、それぞれフレンドリスト / グループリスト / ディスカッショングループリストを表します。例:
# 返回 好友列表:
>>> bot.List('buddy')
# 返回名为 'jack' 的好友的列表:
>>> bot.List('buddy', 'jack')
# 返回 群列表:
>>> bot.List('group')
# 返回名为 “机器人测试” 的群的列表:
>>> bot.List('group', '机器人测试')
tinfo の意味 (ケース 2): tinfo は、グループ/ディスカッション グループのメンバー リストを表す、 group
/ discuss
と等しい ctype を持つ QContact オブジェクトにすることもできます。たとえば、以下の 2 番目と 3 番目の文は、それぞれグループ「Class 456」のメンバーのリストと、グループ内で名刺が「jack」であるメンバーのリストを返します。
>>> g = bot.List('group', "456班")[0] # g 是一个 Group 对象(群“456班”)
>>> bot.List(g) # 返回 群“456班” 的成员列表
>>> bot.List(g, 'card=jack') # 返回 群“456班” 中名片为 “jack” 的成员列表
上記の 3 番目の文では、bot.List(g, Card='jack') の形式が許可されていないことに注意してください。
List インターフェイスの内部実行シーケンス:まず、QQBot の連絡先データベースで tinfo によって表される連絡先リストを検索します。リストがデータベースにすでに存在する場合は、このリスト内を検索して、「すべての連絡先」と「cinfo に一致する連絡先」のリストを含むリストを返します。 ; データベースにそのようなリストが存在しない場合は、QQ サーバーにデータを要求して連絡先リストを取得します。取得に成功すると、連絡先リストがデータベースに保存され、「このリスト」をすべて含むリストが検索されて返されます。情報で「一致する連絡先」リスト。QQ サーバーからのデータの要求中にエラーが発生した場合、関連する失敗情報が出力され、None が返されます。
List インターフェイスの戻り値の意味: tinfo で指定された連絡先リスト内の cinfo に一致するすべての連絡先を表す空でないリストを返します。 連絡先リストに cinfo に一致する連絡先が存在しないことを示します。表すものはありません。QQ サーバーからの連絡先リストと情報の要求に失敗しました。一致する連絡先があるかどうかわかりません。
List インターフェースを呼び出した後は、後続のコードを実行する前に、必ず上記 3 つの状況に基づいて戻り値を判断してください。
注: List インターフェイスが空ではないリストを返す場合、リスト内の要素は str オブジェクトではなく QContact オブジェクトになります。
>>> g = bot.List('group')[0] # g 是一个 Group 对象
>>> print([g, type(g), g.qq, g.name, g.uin, g.mark]) # 打印 g 的各项属性
さまざまなタイプの QContact オブジェクトの属性の意味については、qcontact-attr を参照してください。
Update インターフェイスのパラメータ tinfo は、List インターフェイスのパラメータと同じ意味を持ちます。このインターフェイスを呼び出すと、直ちに QQ サーバーに対応する連絡先リストが要求され、連絡先データベースが更新され、更新が成功するまでブロックされます。最も遅いのはフレンドリストです。フレンド数が多い場合は5~10秒ほどブロックされる場合があります。メンバーリストの更新は 2,000 人規模の大規模なグループであっても 1 ~ 2 秒で完了します。
更新が成功した場合は True が返され、それ以外の場合は False が返されます。
例:
# 更新 好友列表 :
>>> bot.Update('buddy')
# 更新 群列表 :
>>> bot.Update('group')
# 更新 某个群的成员列表 :
>>> gl = bot.List('group', "456班")
>>> if gl:
>>> g = gl[0]
>>> bot.Update(g)
連絡先にメッセージを送信します。最初のパラメータは QContact オブジェクトで、2 番目のパラメータはメッセージの内容です。もう一度注意してください: メッセージを送信できるのは友人/グループ/ディスカッション グループのみです。グループ メンバー/ディスカッション グループ メンバーにメッセージを送信することはできません。
メッセージ内容に「/smile」などの顔文字キーワードを埋め込んで相手に顔文字を送信できます。詳しくはfacemap.pyをご覧ください。
送信が成功すると、文字列が返されます (向xx 发消息成功
)。それ以外の場合は、エラーの原因を含む文字列 (错误:...
) が返されます。
メッセージを送信するときに、QQ サーバーがコード 1202 を返すため、メッセージが繰り返し送信されることがあります。バージョン v2.1.17 では、この問題に対して bot.SendTo インターフェイスにパラメーター resendOn1202 が追加されました。このパラメーターが True (デフォルト値) の場合、QQ サーバーがメッセージの送信時にコード 1202 (メッセージが失敗する可能性があることを示す) を返した場合、また、リターン コードが 0 になるまで 3 回送信され続けます。このパラメータが False の場合、再送信は試行されません。
これを True に設定すると、ほとんどの場合にメッセージが確実に送信されますが、欠点としては、メッセージが繰り返し送信される場合があることです。逆にFalseに設定するとメッセージは繰り返し送信されませんが、メッセージが送信できない場合があります。
つまり、この 1202 コードには不確実性があるため、完璧な解決策はありません。実際の状況に応じて resendOn1202 の値を選択してください。
最初のパラメーター contact は、bot.List によって返される QContact オブジェクト、またはコールバック関数 onQQMessage によって渡される最初のパラメーターである必要があります。例:
# 向 昵称 为 jack 的好友发消息
>>> bl = bot.List('buddy', 'jack')
>>> if bl:
>>> b = bl[0]
>>> bot.SendTo(b, 'hello')
グローバル設定情報は bot.conf に保存されます。各設定の詳細については、このドキュメントのセクション 7 を参照してください。たとえば、bot.conf.termServerPort は QQBot コマンド ライン サーバーのポート番号を保存し、bot.conf.qq はこのログインの QQ 番号を保存します。
注: bot.conf に保存された設定情報は読み取り専用です。この設定情報は変更しないでください。
上記の onQQMessage 応答関数に加えて、onInit/onQrcode/onStartupComplete/onInterval/onUpdate/onPlug/onUnplug/onExit の合計 9 つのイベントに対してコールバック関数を登録することもできます。コールバック関数のパラメーターの形式、意味、および意味については、サンプルスロットを参照してください。すべてのイベントの例。
プログラムの実行プロセスと各コールバック関数の呼び出しタイミングは以下のとおりです。
もう一度注意してください:登録されたコールバック関数の関数名と関数パラメータ (番号と名前) は変更しないでください。
QQBot がグループ メッセージを受信すると、まずメッセージの内容に基づいて誰かが自分自身を @ したかどうかを判断します。その場合は、メッセージ内容の先頭に[@ME]
マークを追加して onQQMessage 関数に渡します。それ以外の場合は、メッセージ内容のすべての@ME
@Me
に置き換えて onQQMessage に渡します。したがって、onQQMessage 関数では、メッセージ送信者によって @ されたかどうかを知るには、コンテンツに@ME
が含まれているかどうかを判断するだけで済みます。例えば:
def onQQMessage ( bot , contact , member , content ):
if '@ME' in content :
bot . SendTo ( contact , member . name + ',艾特我干嘛呢?' )
グループ内に自分の名前の最初と同じ名前のメンバーがいる場合(例:自分の名前が ab で、他のメンバーの名前が abc など)、誰かが @abc だと誤って報告されますので注意してください。 @ME の場合、この場合、誤検知を避けるためにグループ名刺を変更する必要があります。
この QQ がメッセージを送信すると、QQBot も同じメッセージを受信します。ボット オブジェクトは、メッセージが単独で送信されたかどうかを判断する isMe メソッドを提供します。
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 個のキーワード パラメータを受け入れます。各パラメータは、タスクのカスタマイズされた時間コンポーネントが一致する必要がある値を表します。たとえば、hour='11,17' はタスクを 11:xx または 17:xx に実行する必要があることを意味し、minut='55' はタスクを xx:55 に実行する必要があることを意味し、minut='0-55/5' はタスクを実行する必要があることを意味します。タスクを xx: 00、xx:05、xx:10、...、xx:55 に実行する必要があることを意味します。day_of_week='mon-fri' (または '0-4') は、タスクを実行する必要があることを示します。月曜日から金曜日まで実行されます。
qqbotsched は、Python のスケジュールされたタスク フレームワーク apscheduler を単純にカプセル化したものであり、そのパラメータは Unix システムでは crontab 形式で入力する必要があります。 crontab および Python のスケジュールされたタスク フレームワーク apscheduler については、次の参考資料を参照してください。
各 crontab パラメータの形式の詳細については、次を参照してください。
コールバック関数を登録し、スケジュールされたタスクをカスタマイズすることが、QQBot を拡張する唯一の方法です。これらの関数を作成するときは、次の点に注意してください。
WebQQ にログインするときは、携帯電話の QQ を使用して QR コード画像をスキャンする必要があります。QQBot では、次の 4 つのモードで QR コード画像を表示できます。
GUI モードはデフォルトのモードであり、PC でのみ使用できます。メールボックス モードは、パーソナル コンピュータおよびリモート サーバーで使用できます。サーバー モードは通常、パブリック IP アドレスを持つシステムでのみ使用されます。 QQ メールボックスを使用して QR コードを受信する場合は、QR コード画像を送信した後、モバイル QQ クライアントで電子メールを開き、QR コードを長押ししてスキャンします。テキスト モードは、開発プロセスまたはサーバー展開中に使用するのに便利で、開発者に QQ にログインするためのショートカットを提供します。
注: メールボックス モード/サーバー モード/テキスト モードがオンの場合、GUI モードはオフになり、ログイン時に QR コード画像は自動的にポップアップされません。
QR コード マネージャー (QrcodeManager オブジェクト) はログインするたびに作成されます。QR コード マネージャーは、設定ファイルとコマンド ライン パラメーターに基づいて QR コード画像の表示方法を選択します。
構成ファイルは~/.qqbot-tmp/v2.x.confです ( ~ はユーザーのホーム ディレクトリを表します。win7 では C:Usersxxx、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" : "[email protected]",
# 该邮箱的 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" : {}
# },
}
独自のユーザー構成を構成ファイルに追加できます (つまり、ファイルのディクショナリに新しい項目を追加し、この項目のキーがユーザーを表します)。たとえば、ファイル内に既に存在する somebody 項目がユーザーを表します。 somebody という名前の場合、QQBot の実行時にqqbot -u somebodyと入力すると、somebody プロジェクトの下の設定がロードされます。
以下では、設定ファイル内の各設定の機能について説明します。次の内容は、someone の下の設定が変更され、 qqbot -u somebodyモードで実行されることを前提としています。
QR コードを表示するためにメールボックス モードを使用する必要がある場合は、mailAccount 項目と mailAuthCode 項目をそれぞれメールボックス アカウントと認証コードとして設定できます。実行後、QR コード マネージャーは QR コード画像をメールボックスに送信します。
注: 認証コードはメールボックスのログイン パスワードではなく、 IMAP/SMTPサービスをアクティブ化するためにメールボックス サービス プロバイダーによって提供される認証コードです (注意: QQ/NetEase メールボックスではこれをアクティブ化できません)。 Web版サービスのメールボックス設定を確認し、認証コードを取得します。 mailAccount のみが定義されており、mailAuthCode が定義されていない場合は、プログラムの起動時に認証コードを手動で入力する必要があります。
メールボックス モードは、QQ、NetEase、Google メールボックスでテストされています。
サーバー モードを使用する必要がある場合は、httpServerIP 項目と httpServerPort 項目をパブリック ネットワーク IP に設定する必要があります。サーバー モードをオンにすると、http://{httpServerIP}:{httpServerPort}/{any} を通じて QR コード画像にアクセスできるようになります。ここで、{any} には空ではない数字または文字の文字列を指定できます。
メールボックスモードとサーバーモードを同時にオンにすると、メール送信時に実際の画像は送信されず、QRコード送信時に画像アドレスのみが送信されます。有効期限が切れたら、メールを更新してください。メールボックスモードのみをオンにすると、メール送信時に実際の画像が送信されます。QR コードの有効期限が切れたら、メールを既読に設定する必要があります (QQ が表示されたメールをクリックすると、メールが読まれます)。携帯電話)事前に最新のQRコード画像が送信されます。
cmdQrcode 項目を True に設定すると、用語内に QR コードがテキスト モードで表示されます。注: テキスト モードを使用するには、pilow ライブラリと wcwidth ライブラリを自分でインストールする必要があります。pip を使用してインストールできます。
構成ファイル内の各ユーザーには qq 項目があり、この項目が特定の QQ 番号に設定されている場合、QQBot は起動時にこの QQ 番号の前回のログイン時に保存されたログイン情報を使用して自動的にログインします。
設定ファイルで restartOnOffline 項目を True に設定すると、QQBot がオフラインになったときやエラー終了したときに自動的に再起動されます。
このオプションは、UNIX 系システムでのみ有効です。構成内のデーモン オプションを True に設定すると、プログラムがデーモン モードで実行されます。この時点で、標準出力と標準エラーは daemon-$qq.log ファイルにリダイレクトされます ($qq は構成内の qq オプションの値です)。
通常の状況では、QQBot は QR コードをスキャンしてログインするとすぐに起動します。必要な場合にのみ連絡先リストを取得し、連絡先データベースを更新します。設定ファイルの startAfterFetch が True に設定されている場合、 QQBot はすべての連絡先リストが取得されるまで待機してから開始します。連絡先の数が増えると時間がかかることに注意してください。
QQBot が開始されると、QQBot ターム サーバーが開き、qq コマンド ライン ツールを介してユーザーが送信した操作コマンドと、HTTP API インターフェイスを介して送信された操作コマンドを監視します。このサーバーのリスニング IP は常に 127.0.0.1 です。デフォルトのリスニング ポート番号は 8188 ですが、このポート番号は termServerPort の値を変更することで変更できます。
構成された QQBot-term サーバーのポート番号がデフォルトの 8188 ではない場合、qq コマンドを実行するときに、次のように最初のパラメーターにポート番号を指定する必要があります。
$ qq 8100 send buddy jack hello
$ qq 8100 list group-member chatbot
同様に、HTTP API インターフェイスのポート番号も変更する必要があります (http://127.0.0.1:8100/send/buddy/jack/hello など)。
qq コマンドと HTTP-API インターフェイスを使用する必要がない場合は、このポート番号を 0 に設定できます。このとき、QQBot-term サーバーは開かれません。
同じマシン上の複数の QQ 番号にログインする必要がある場合は、異なる端末で複数の qqbot プロセスを直接開いてログインできます。ただし、各 qqbot プロセスは独自の termServerPort および httpServerPort を設定する必要があります (またはすべて 0 または空の値に設定する) )、そうでない場合は、ポート番号の競合が発生します。
デバッグ項目が True に設定されている場合、実行中にデバッグ情報が出力されます。
通常、プラグインはシステムのインポート ディレクトリまたは ~/.qqbot-tmp/plugins ディレクトリに保存する必要があります。pluginPath オプションで他の保存ディレクトリを構成できます。さらに、プラグインオプションでは、QQBot の起動時にロードする必要があるプラグインを指定できます。
設定ファイル内のすべてのオプションには対応するコマンド ライン パラメータがあり、コマンド ライン パラメータに入力されたオプションは設定ファイル内のオプションよりも優先されます。 qqbot -hと入力すると、すべてのコマンド ライン パラメーターの形式が表示されます。
プログラムには 4 つのレベルの構成があり、それらの優先順位は次のとおりです。
使用 qqbot -u somebody 启动程序时,依次加载:
根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
使用 qqbot 启动程序时,依次加载:
根配置 -> 默认配置 -> 命令行参数配置
その中には、ルート設定は固定されており、ユーザーは変更できません。デフォルト設定とユーザー設定は、v2.x.conf ファイルで変更できます。最後に、設定はコマンド ライン パラメータに入力することもできます。
qqbot が実行されると、作業ディレクトリ内で次のファイル/ディレクトリが検索/作成されます。
デフォルトの作業ディレクトリは ~/.qqbot-tmp/ です。qqbot の起動時にコマンド ライン パラメータ -b|--bench を使用して他の作業ディレクトリを指定できます (例: qqbot -b bench)。
プラグインは実際には Python モジュールであるため、Python ファイルまたは Python パッケージにすることができます。 qqbot は、プラグイン名に基づいて次のディレクトリでプラグインを検索します。
ホットプラグ方式
qqbot の実行中にプラグインを動的にロード/アンロードできます。次の 3 つの方法があります。
最初の 2 つのメソッドは qqbot プロセスの外部プロセスによって呼び出され、3 番目のメソッドは qqbot プロセス内で使用されます。 qqbot プロセス内では最初の 2 つのメソッドを使用しないでください。
注: ホットプラグ方式を使用してロードされたプラグインは、qqbot の再起動後に失われます。
自動プラグアットスタートモード
qqbot の起動時にプラグインを自動的にロードすることもできます。設定のプラグイン オプション (コマンド ライン パラメータ -pl|--plugins) でロードする必要があるプラグインの名前を指定するだけです。これらのプラグインは、ログイン前の起動時に読み込まれます。
さらに、システム (またはプラグイン ディレクトリ) にqqbotdefaultという名前のパッケージがある場合、そのパッケージの下にあるすべてのサブモジュールが起動時に自動的にプラグインとしてロードされます (注: qqbotdefault 自体はプラグインとしてロードされません)プラグイン)。
プラグインの作成には、主にコールバック関数またはスケジュールされたタスク関数の作成が含まれます。詳細については、セクション 4 ~ 6 を参照してください。
名前 | ギットハブの作者 | 機能説明 | デフォルトでロードするかどうか |
---|---|---|---|
qqbot.plugins.sampleslots | パンドリア | コールバック関数の例 | はい |
qqbot.plugins.schedrestart | パンドリア | スケジュールされた再起動 | はい |
qqbot.plugins.miniirc | パンドリア | IRCサーバー | いいえ |
パスワードログイン | パンドリア | ユーザー名とパスワードを使用してログインします | いいえ |
広告ブロック | フェイスウェブ | グループ広告ブロック | いいえ |
チャットログ | フェイスウェブ | チャット内容の記録 | いいえ |
共有できる便利なプラグインがある場合は、私にメールを送ってください。
LinuxシステムではQQクライアントが使用できないため、プラグインqqbot.plugins.miniircを使用してIRCチャット機能を実装できます。ロード方法: qq plug qqbot.plugins.miniirc、または起動時にロード: qqbot -pl qqbot.plugins.miniirc、または設定ファイルの plugins オプションにqqbot.plugins.miniirc
を追加します。
プラグインがロードされると、マイクロ IRC サーバーがポート 6667 で開きます。ユーザーは 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 フレンド/グループ/ディスカッション グループとチャットするのに十分です。
QQBotは、次のオープンソースプロジェクトを指します。
上記の3人の著者が、無私の共有、特にSmartQQプロトコルの詳細かつ詳細な分析については、Scienjusに感謝します。