qqbot adalah robot QQ yang diimplementasikan dengan python dan berdasarkan protokol SmartQQ Tencent. Robot ini dapat berjalan di platform Linux, Windows dan Mac OSX.
Alamat github proyek ini: https://github.com/pandolia/qqbot
Anda dapat melakukan ini dengan memperluas qqbot:
Untuk digunakan dengan Python 2.7/3.4+, instal dengan pip:
pip install qqbot
Atau unduh kode sumber, unzip, cd ke direktori dan jalankan: pip install
.
Masukkan: qqbot pada baris perintah untuk memulai QQBot.
Selama proses startup, gambar kode QR akan muncul secara otomatis. Anda perlu menggunakan klien QQ seluler untuk memindai kode dan mengotorisasi login. Setelah startup berhasil, informasi login akan disimpan ke file lokal Saat memulai berikutnya, Anda dapat memasukkan: qqbot -q qq number . Pertama coba pulihkan informasi login dari file lokal (tidak perlu memindai kode secara manual) . Hanya pemulihan yang gagal. Anda perlu memindai kode QR secara manual untuk login jika login berhasil atau informasi login telah kedaluwarsa. Secara umum, informasi login yang disimpan akan kedaluwarsa setelah 2 hari.
Catatan: Di Linux, perintah gvfs-open atau shotwell diperlukan di sistem untuk memunculkan gambar kode QR secara otomatis (umumnya, sistem dengan sistem file virtual GNOME yang diinstal gvfs akan berisi salah satu dari dua perintah ini). Di Windows 10, program pembuka default untuk file gambar png perlu diatur di sistem agar secara otomatis memunculkan gambar kode QR.
Jika sistem tidak dapat memunculkan gambar kode QR secara otomatis, Anda dapat membuka file gambar secara manual dan memindai kode, atau Anda dapat mengatur mode tampilan kode QR ke mode kotak surat, mode server, atau mode teks untuk memindai kode. lihat Bagian 7 dokumen ini.
Setelah QQBot dimulai, gunakan perintah qq di jendela konsol lain untuk mengoperasikan QQBot. Perintah berikut saat ini disediakan:
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
Perintah daftar menyediakan permintaan kontak dan fungsi pencarian yang kuat. Contoh penggunaan adalah sebagai berikut:
# 列出所有好友
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
Jika parameter ketiga dan keempat dalam format key=val, maka harus dalam format name=xx|nick=xx|mark=xx|card=xx|qq=xx key=val, tekan Prinsip pemrosesannya adalah sebagai berikut: jika berupa string angka, kueri berdasarkan nomor QQ, jika tidak, kueri berdasarkan nama.
Jika ada nama duplikat, semua kontak dengan nama duplikat tersebut akan dicantumkan. menyukai:
qq list group 机器人测试
Semua grup bernama "Bot Test" akan dicantumkan.
Jika ":like:" ditambahkan ke parameter ketiga dan keempat dari perintah daftar, pencarian akan didasarkan pada pola pencocokan parsial. Contoh penggunaan adalah sebagai berikut:
# 列出名称中含有 “李” 的好友
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
Mulai dari versi v2.2.5, perintah list menggunakan tabel untuk menampilkan daftar kontak. Contoh gaya keluarannya adalah sebagai berikut:
Untuk memastikan efek tampilan tabel di terminal, disarankan untuk mengatur font keluaran terminal ke konsol dan jumlah maksimum karakter yang dapat dicetak di setiap baris lebih besar dari 120. Catatan juga: Untuk memastikan efek tampilan tabel, jika nama kontak, kartu nama, dan atribut lainnya terlalu panjang atau mengandung karakter khusus, atribut ini akan dipotong atau disaring sebelum dikeluarkan ke terminal.
Perintah perbarui memperbarui daftar kontak yang ditentukan, dan arti parameternya sama dengan perintah daftar, seperti:
# 更新好友列表
qq update buddy
# 更新群列表
qq update group
# 更新 群“456班” 的成员列表
qq update group-member 456班
Parameter ketiga pada perintah send memiliki format yang sama dengan parameter ketiga pada perintah list. Perlu diketahui, jika ada nama duplikat, pesan akan terkirim ke semua kontak dengan nama yang sama. Perhatikan juga bahwa parameter kedua hanya dapat berupa sobat/grup/diskusi, bukan anggota grup/anggota diskusi. Contoh:
# 给 好友“jack” 发消息 “你好”
qq send buddy jack 你好
# 给 群“198班” 发消息 “大家好”
qq send group 198班 大家好
# 给 QQ 为 12345 的好友发消息
qq send buddy 12345 xxx
# 给讨论组发消息
qq send discuss MyDiscuss hello
Anda dapat menyematkan kata kunci emotikon seperti "/cute" di konten pesan untuk mengirim emotikon ke pihak lain Lihat facemap.py untuk detailnya. Anda juga dapat menggunakan dua karakter escape n dan t dalam isi pesan (misalnya: kirim buddy jack baris pertaman baris kedua).
Semua perintah di atas menyediakan antarmuka HTTP API yang sesuai untuk dipanggil oleh pengembang front-end web. Alamat URL antarmuka adalah http://127.0.0.1:8188/{command} dari perintah setelah qq. Pisahkan saja dan ganti perintah di url, seperti: http://127.0.0.1:8188/send/buddy/jack/hello , lihat urltestbot.md untuk contoh lainnya. Catatan: Jika perintah berisi karakter Cina atau khusus, pengkodean URL (utf8) perlu dilakukan terlebih dahulu, misalnya, hubungi http://127.0.0.1:8188/send/buddy/jack/nihao%20%E4%BD% A0%E5 %A5%BD%20wohao akan mengirimkan pesan "nihao hello wohao". (Kiat: Dalam JavaScript, Anda dapat menggunakan fungsi encodeURIComponent untuk pengkodean).
Selain itu, setelah QQBot dimulai, jika Anda menggunakan akun QQ ini untuk mengirim pesan "--version" ke grup/grup diskusi di klien lain (seperti QQ seluler), QQBot akan secara otomatis membalas ke grup/grup diskusi: "QQBot -v2.xx".
Sangat mudah untuk mengimplementasikan robot QQ Anda sendiri. Anda hanya perlu menentukan fungsi respons pesan Anda sendiri dan memuatnya sebagai plug-in. Contoh kode:
# -*- 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 ()
Perhatikan bahwa nama fungsi dari fungsi respons yang terdaftar di atas harus "onQQMessage", dan parameter fungsi juga harus konsisten dengan yang di atas.
Simpan kode di atas sebagai sample.py (perhatikan bahwa kode ini disimpan sebagai file berkode utf8). Tempatkan di direktori ~/.qqbot-tmp/plugins/ ( ~ mewakili direktori home pengguna, C:Usersxxx di bawah win7), atau direktori yang dapat diimpor ke sistem (seperti Lib/ di python direktori instalasi) direktori paket situs).
Setelah itu, biarkan proses qqbot sebelumnya berjalan dan masukkan sampel colokan qq di konsol lain. Kemudian fungsi onQQMessage dalam file ini dapat didaftarkan ke acara QQBot yang sesuai. Saat ini, jika Anda menggunakan QQ lain untuk mengirim pesan "-hello" ke QQ ini, maka secara otomatis akan membalas "Halo, saya robot QQ" . Jika Anda mengirim pesan "-stop" , robot QQ akan menjadi tertutup.
Masukkan sampel qq unplug di konsol untuk menghapus instalasi plug-in ini dan fungsi panggilan balik yang sesuai. Beberapa plug-in dapat dimuat secara bersamaan, dan fungsi terkait di setiap plug-in akan dipanggil secara berurutan (tetapi urutan pemanggilan tidak ada hubungannya dengan urutan pemuatan).
Setelah QQBot mulai berjalan, setiap kali menerima pesan QQ, ia akan meneruskan sumber pesan, konten pesan, dan objek QQBot ke fungsi respons pesan terdaftar. di dalam:
bot : QQBot 对象,提供 List/SendTo/Stop/Restart 等接口,详见本文档第五节
contact : QContact 对象,消息的发送者,具有 ctype/qq/uin/nick/mark/card/name 等属性
member : QContact 对象,仅当本消息为 群消息或讨论组消息 时有效,代表实际发消息的成员
content : str 对象,消息内容
contact mewakili pengirim pesan, dan atribut ctype-nya dapat berupa buddy
/ group
/ discuss
, yang mewakili objek teman/grup/grup diskusi, yang menunjukkan bahwa pesan ini adalah pesan teman/pesan grup/pesan grup diskusi.
member hanya valid jika pesan ini adalah pesan grup atau pesan grup diskusi, dan mewakili anggota yang benar-benar mengirim pesan. Atribut ctype-nya dapat berupa group-member
/ discuss-member
, yang mewakili objek anggota grup/anggota grup diskusi. Jika pesan ini adalah pesan teman, anggota sama dengan Tidak Ada.
Baik kontak maupun anggota adalah objek QContact. Untuk mengetahui arti atribut berbagai jenis objek QContact, lihat: qcontact-attr. Perhatikan bahwa semua objek QContact adalah objek hanya-baca . Hanya propertinya yang dapat dibaca, propertinya tidak dapat disetel, dan properti tambahan tidak dapat ditambahkan ke dalamnya.
Anda dapat memanggil antarmuka SendTo pada objek QQBot untuk mengirim pesan ke objek QContact, namun harap diperhatikan: Anda hanya dapat mengirim pesan ke teman/grup/grup diskusi, tetapi tidak ke anggota grup/anggota grup diskusi . Dengan kata lain, hanya bot.SendTo(contact, 'xxx') yang dapat dipanggil, tetapi bot.SendTo(member, 'xxx') tidak dapat dipanggil.
Objek QQBot menyediakan total 9 antarmuka publik Daftar/Perbarui/SendTo/Plug/Unplug/Login/Stop/Restart/FreshRestart. Huruf pertama dari antarmuka ini semuanya menggunakan huruf kapital. Selain itu, atribut publik conf disediakan untuk menyimpan informasi konfigurasi global.
Secara umum, jangan memanggil/mengakses metode/properti lain dari objek ini. Secara khusus, jangan panggil antarmuka ini di thread anak . Berikut ini menjelaskan tujuh antarmuka pertama dan atribut conf.
Jika Anda perlu menjalankan atau menguji antarmuka di atas dalam IDE atau python-shell, Anda harus menutup proses qqbot terlebih dahulu, dan menjalankan kode berikut dalam IDE atau python-shell untuk login:
>>> from qqbot import _bot as bot
>>> bot.Login(['-q', '1234'])
Sesuai dengan perintah daftar di Bagian 3 dokumen ini. Mengembalikan daftar objek kontak (objek QContact) atau Tidak Ada. Parameter pertama tininfo adalah nama kode daftar kontak, dan parameter kedua adalah opsional (formatnya sama dengan parameter ketiga dari perintah daftar).
Parameter tininfo digunakan untuk mewakili daftar kontak. Parameter ini sangat penting dalam permintaan kontak.
Arti dari tinfo (kasus 1): tininfo dapat berupa buddy
/ group
/ discuss
, yang masing-masing mewakili daftar teman / daftar grup / daftar grup diskusi. Contoh:
# 返回 好友列表:
>>> bot.List('buddy')
# 返回名为 'jack' 的好友的列表:
>>> bot.List('buddy', 'jack')
# 返回 群列表:
>>> bot.List('group')
# 返回名为 “机器人测试” 的群的列表:
>>> bot.List('group', '机器人测试')
Arti dari tininfo (Kasus 2): tinfo juga dapat berupa objek QContact dengan ctype yang sama dengan group
/ discuss
, mewakili daftar anggota grup/grup diskusi. Misalnya, kalimat kedua dan ketiga di bawah mengembalikan daftar anggota grup "Kelas 456" dan daftar anggota yang kartu namanya masing-masing adalah "jack" di grup:
>>> g = bot.List('group', "456班")[0] # g 是一个 Group 对象(群“456班”)
>>> bot.List(g) # 返回 群“456班” 的成员列表
>>> bot.List(g, 'card=jack') # 返回 群“456班” 中名片为 “jack” 的成员列表
Perhatikan bahwa kalimat ketiga di atas tidak mengizinkan format bot.List(g, card='jack').
Urutan eksekusi internal antarmuka Daftar: pertama cari daftar kontak yang diwakili oleh tinfo di database kontak QQBot; jika daftar sudah ada di database, cari di dalam daftar ini dan kembalikan daftar yang berisi daftar "semua dan" kontak yang cocok cinfo " ; jika tidak ada daftar seperti itu di database, minta data dari server QQ untuk mendapatkan daftar kontak. Setelah akuisisi berhasil, daftar kontak akan disimpan ke database, lalu cari dan kembalikan daftar yang berisi "daftar ini" semua di cinfo daftar "kontak yang cocok"; jika terjadi kesalahan saat meminta data dari server QQ, informasi kegagalan yang relevan akan dicetak dan Tidak Ada yang dikembalikan.
Arti dari nilai kembalian antarmuka Daftar: Mengembalikan daftar yang tidak kosong untuk mewakili semua kontak yang cocok dengan cinfo dalam daftar kontak yang ditentukan oleh tinfo; Mengembalikan daftar kosong untuk menyatakan bahwa tidak ada kontak yang cocok dengan cinfo dalam daftar kontak; Tidak ada yang mewakili Permintaan daftar kontak dan informasi dari server QQ gagal.
Setelah memanggil antarmuka Daftar, pastikan untuk menilai nilai yang dikembalikan berdasarkan tiga situasi di atas sebelum mengeksekusi kode berikutnya.
Catatan: Ketika antarmuka Daftar mengembalikan daftar yang tidak kosong, elemen dalam daftar adalah objek QContact, bukan objek str:
>>> g = bot.List('group')[0] # g 是一个 Group 对象
>>> print([g, type(g), g.qq, g.name, g.uin, g.mark]) # 打印 g 的各项属性
Untuk mengetahui arti atribut berbagai jenis objek QContact, lihat: qcontact-attr.
Parameter tinfo pada antarmuka Pembaruan memiliki arti yang sama dengan parameter pada antarmuka Daftar. Memanggil antarmuka ini akan segera meminta daftar kontak yang sesuai dari server QQ dan memperbarui basis data kontak, dan akan memblokir hingga pembaruan berhasil. Update paling lambat adalah daftar teman. Jika teman banyak, mungkin diblokir selama 5 ~ 10 detik. Daftar anggota diperbarui dengan sangat cepat. Bahkan untuk grup besar yang terdiri dari 2.000 orang, waktu pembaruan hanya 1 hingga 2 detik.
Jika pembaruan berhasil, True dikembalikan; jika tidak, False dikembalikan.
Contoh:
# 更新 好友列表 :
>>> bot.Update('buddy')
# 更新 群列表 :
>>> bot.Update('group')
# 更新 某个群的成员列表 :
>>> gl = bot.List('group', "456班")
>>> if gl:
>>> g = gl[0]
>>> bot.Update(g)
Kirim pesan ke kontak. Parameter pertama adalah objek QContact, dan parameter kedua adalah isi pesan. Ingatkan lagi: Anda hanya dapat mengirim pesan ke teman/grup/grup diskusi. Anda tidak diperbolehkan mengirim pesan ke anggota grup/anggota grup diskusi .
Anda dapat menyematkan kata kunci emotikon seperti "/smile" di konten pesan untuk mengirim emotikon ke pihak lain untuk detailnya, lihat facemap.py.
Jika pengiriman berhasil, string dikembalikan (向xx 发消息成功
). Jika tidak, string yang berisi penyebab kesalahan (错误:...
) akan dikembalikan.
Saat mengirim pesan, pesan tersebut mungkin terkirim berulang kali. Hal ini karena server QQ mengembalikan kode 1202. Versi v2.1.17 telah menambahkan parameter ke antarmuka bot.SendTo untuk masalah ini: resendOn1202. Jika parameter ini Benar (nilai default), jika server QQ mengembalikan kode 1202 (menunjukkan bahwa pesan mungkin gagal) saat mengirim pesan, itu juga akan terus dikirim 3 kali hingga kode pengembalian adalah 0. Jika parameter ini Salah, pengiriman ulang tidak akan dilakukan.
Menyetelnya ke True dapat memastikan bahwa pesan akan terkirim dalam banyak kasus, namun kelemahannya adalah terkadang pesan akan dikirim berulang kali. Sebaliknya, jika disetel ke False, pesan tidak akan terkirim berulang kali, namun terkadang pesan tidak dapat terkirim.
Singkatnya, karena ketidakpastian kode 1202 ini, tidak ada solusi yang tepat. Silakan pilih nilai resendOn1202 sesuai dengan situasi aktual Anda.
Parameter pertama contact harus berupa objek QContact yang dikembalikan oleh bot.List atau parameter pertama yang diteruskan oleh fungsi callback onQQMessage. Contoh:
# 向 昵称 为 jack 的好友发消息
>>> bl = bot.List('buddy', 'jack')
>>> if bl:
>>> b = bl[0]
>>> bot.SendTo(b, 'hello')
Informasi konfigurasi global disimpan di bot.conf. Untuk detail tentang setiap konfigurasi, lihat Bagian 7 dokumen ini. Misalnya, bot.conf.termServerPort menyimpan nomor port server baris perintah QQBot, dan bot.conf.qq menyimpan nomor QQ login ini.
Catatan: Informasi konfigurasi yang disimpan di bot.conf bersifat read-only. Harap jangan mengubah informasi konfigurasi ini.
Selain fungsi respons onQQMessage yang disebutkan di atas, Anda juga dapat mendaftarkan fungsi panggilan balik untuk total sembilan peristiwa di Init/onQrcode/onStartupComplete/onInterval/onUpdate/onPlug/onUnplug/onExit. Silakan lihat tempat sampel untuk mengetahui format parameter fungsi panggilan balik, arti dan contoh semua kejadian.
Proses berjalannya program dan waktu pemanggilan setiap fungsi callback adalah sebagai berikut:
Ingatkan lagi: nama fungsi dari fungsi panggilan balik yang terdaftar dan parameter fungsi (nomor dan nama) tidak boleh diubah .
Ketika QQBot menerima pesan grup, pertama-tama ia akan menentukan apakah seseorang @ dirinya sendiri berdasarkan isi pesan. Jika demikian, tambahkan tanda [@ME]
di awal konten pesan dan teruskan ke fungsi onQQMessage; jika tidak, ganti semua @ME
di konten pesan dengan @Me
dan teruskan ke onQQMessage. Oleh karena itu, pada fungsi onQQMessage, Anda hanya perlu menentukan apakah konten tersebut berisi @ME
untuk mengetahui apakah Anda telah @ oleh pengirim pesan. Misalnya:
def onQQMessage ( bot , contact , member , content ):
if '@ME' in content :
bot . SendTo ( contact , member . name + ',艾特我干嘛呢?' )
Perlu diketahui bahwa jika ada anggota lain dalam grup yang namanya sama dengan awal nama Anda sendiri (misalnya: nama Anda ab dan nama anggota lain adalah abc), maka ketika seseorang @abc, maka akan dilaporkan secara salah. sebagai @ME, dalam hal ini, Anda perlu memodifikasi kartu nama grup Anda untuk menghindari kesalahan positif.
Ketika QQ ini mengirimkan pesan, QQBot juga akan menerima pesan yang sama. Objek bot menyediakan metode isMe untuk menentukan apakah pesan tersebut dikirim dengan sendirinya:
def onQQMessage ( bot , contact , member , content ):
if bot . isMe ( contact , member ):
print ( 'This is me' )
Mulai dari 2.1.13, qqbot menyediakan dekorator fungsi yang kuat - qqbotsched
untuk menyesuaikan tugas terjadwal, contoh kode:
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 , '同志们:开饭啦啦啦啦啦啦!!!' )
Setelah kode di atas dimuat dalam bentuk plug-in, pesan akan otomatis terkirim ke grup "Kelas 456" setiap pukul 11:55 dan 17:55: "Kawan: Makan malam sudah disajikan!!!"
Dekorator qqbotsched menerima total 11 parameter kata kunci: tahun, bulan, hari, minggu, hari_minggu, jam, menit, detik, tanggal_mulai, tanggal_akhir, zona waktu. Setiap parameter mewakili nilai yang harus cocok dengan komponen waktu tugas yang disesuaikan. Misalnya: jam='11,17' berarti tugas harus dijalankan pada 11:xx atau 17:xx, menit='55' berarti tugas harus dijalankan pada xx:55, menit='0-55/5' berarti tugas harus dijalankan pada xx:00, xx:05, xx:10, ..., xx:55 mengeksekusi tugas, day_of_week='senin-jum' (atau '0-4') menunjukkan bahwa tugas tersebut harus dilaksanakan pada hari Senin sampai Jumat.
qqbotsched adalah enkapsulasi sederhana dari apscheduler kerangka tugas terjadwal Python, dan parameternya harus dimasukkan dalam format crontab di sistem Unix. Untuk informasi tentang crontab dan apscheduler kerangka tugas terjadwal Python, silakan lihat bahan referensi berikut:
Untuk detail tentang format setiap parameter crontab, lihat:
Mendaftarkan fungsi panggilan balik dan menyesuaikan tugas terjadwal adalah satu-satunya cara untuk memperluas QQBot. Saat menulis fungsi ini, harap perhatikan hal berikut:
Saat masuk ke WebQQ, Anda perlu menggunakan QQ ponsel Anda untuk memindai gambar kode QR. Di QQBot, gambar kode QR dapat ditampilkan dalam empat mode berikut:
Mode GUI adalah mode default dan hanya tersedia di PC. Mode kotak surat dapat digunakan pada komputer pribadi dan server jarak jauh. Mode server umumnya hanya digunakan pada sistem dengan alamat IP publik. Jika Anda menggunakan kotak surat QQ untuk menerima kode QR, setelah mengirimkan gambar kode QR, klien QQ seluler akan segera menerima pemberitahuan. Buka email di klien QQ seluler, lalu tekan lama kode QR untuk memindai. Mode teks nyaman untuk digunakan selama proses pengembangan atau penerapan server, dan memberi pengembang pintasan untuk masuk ke QQ.
Catatan: Ketika mode kotak surat/mode server/mode teks diaktifkan, mode GUI dimatikan, dan gambar kode QR tidak akan muncul secara otomatis saat masuk.
Manajer kode QR (objek QrcodeManager) akan dibuat setiap kali Anda masuk. Manajer kode QR akan memilih metode tampilan gambar kode QR berdasarkan file konfigurasi dan parameter baris perintah.
File konfigurasinya adalah ~/.qqbot-tmp/v2.x.conf ( ~ mewakili direktori home pengguna, yaitu C:Usersxxx di win7 dan /home/xxx di linux). QQBot untuk pertama kalinya. Buat file konfigurasi ini dengan konten berikut:
{
# 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" : {}
# },
}
Anda dapat menambahkan konfigurasi pengguna Anda sendiri di file konfigurasi (yaitu, menambahkan item baru ke kamus file, dan kunci item ini mewakili pengguna). bernama Someone. , saat menjalankan QQBot, masukkan qqbot -u Someone , dan konfigurasi di bawah proyek Someone akan dimuat.
Berikut ini penjelasan fungsi masing-masing konfigurasi dalam file konfigurasi. Konten berikut mengasumsikan bahwa konfigurasi di bawah seseorang telah dimodifikasi dan dijalankan dalam mode qqbot -u seseorang .
Jika Anda perlu menggunakan mode kotak surat untuk menampilkan kode QR, Anda dapat mengatur item mailAccount dan mailAuthCode masing-masing sebagai akun kotak surat dan kode otorisasi. Setelah dijalankan, pengelola kode QR akan mengirimkan gambar kode QR ke kotak surat.
Catatan: Kode otorisasi bukanlah kata sandi login kotak surat, tetapi kode otorisasi yang diberikan oleh penyedia layanan kotak surat untuk mengaktifkan layanan IMAP/SMTP (pengingat: bukan kotak surat POP3/SMTP yang dapat mengaktifkan ini). pengaturan kotak surat layanan versi web dan dapatkan kode otorisasi. Jika hanya mailAccount yang ditentukan tetapi bukan mailAuthCode, kode otorisasi harus dimasukkan secara manual saat program dimulai.
Mode kotak surat telah diuji di kotak surat QQ, NetEase dan Google.
Jika Anda perlu menggunakan mode server, Anda dapat mengkonfigurasi item httpServerIP dan httpServerPort. Secara umum, item tersebut harus disetel ke ip jaringan publik. Setelah mode server diaktifkan, Anda dapat mengakses gambar kode QR melalui http://{httpServerIP}:{httpServerPort}/{any}. di mana {any} dapat berupa rangkaian angka atau huruf apa pun yang tidak kosong.
Ketika mode kotak surat dan mode server diaktifkan secara bersamaan, gambar asli tidak akan dikirim saat mengirim email. Hanya alamat gambar yang akan dikirim ke kotak surat, dan hanya akan dikirim satu kali habis masa berlakunya, segarkan saja emailnya. Jika Anda hanya mengaktifkan mode kotak surat, gambar asli akan dikirim saat mengirim email. Ketika kode QR kedaluwarsa, Anda perlu mengatur email sebagai sudah dibaca (email akan dibaca setelah Anda mengklik email dengan QQ di ponsel Anda. ponsel) sebelum dikirim.
Jika item cmdQrcode diatur ke True, kode QR akan ditampilkan dalam mode teks dalam istilah tersebut. Catatan: Untuk menggunakan mode teks, Anda perlu menginstal sendiri pustaka bantal dan wcwidth. Anda dapat menggunakan pip untuk menginstalnya.
Setiap pengguna dalam file konfigurasi memiliki item qq. Jika item ini telah diatur ke nomor QQ tertentu, QQBot akan secara otomatis login menggunakan informasi login yang disimpan di login terakhir nomor QQ ini ketika dimulai.
Jika item restartOnOffline diatur ke True dalam file konfigurasi, QQBot akan secara otomatis dimulai ulang ketika offline atau berakhir dengan kesalahan.
Opsi ini hanya valid pada sistem mirip UNIX. Menyetel opsi daemon dalam konfigurasi ke True akan menjalankan program dalam mode daemon. Pada titik ini, keluaran standar dan kesalahan standar dialihkan ke file daemon-$qq.log (di mana $qq adalah nilai opsi qq dalam konfigurasi).
Dalam keadaan normal, QQBot akan dimulai segera setelah memindai kode QR untuk login. Ini hanya akan memperoleh daftar kontak dan memperbarui database kontak bila diperlukan. Jika startAfterFetch di file konfigurasi disetel ke True, QQBot akan menunggu hingga semua daftar kontak diperoleh sebelum memulai . Perhatikan bahwa jika ada lebih banyak kontak, akan memakan waktu lebih lama.
Setelah QQBot dimulai, server istilah QQBot akan dibuka untuk memantau perintah operasi yang dikirim oleh pengguna melalui alat baris perintah qq dan perintah operasi yang dikirim melalui antarmuka HTTP API. dan nomor port pendengaran default adalah 8188, nomor port ini dapat dimodifikasi dengan mengubah nilai termServerPort.
Jika nomor port server istilah QQBot yang dikonfigurasi bukan default 8188, maka saat menjalankan perintah qq, Anda perlu menentukan nomor port pada parameter pertama, seperti:
$ qq 8100 send buddy jack hello
$ qq 8100 list group-member chatbot
Demikian pula nomor port antarmuka HTTP API juga perlu diubah, seperti: http://127.0.0.1:8100/send/buddy/jack/hello.
Jika Anda tidak perlu menggunakan perintah qq dan antarmuka HTTP-API, Anda dapat mengatur nomor port ini ke 0, dan server istilah QQBot tidak akan dibuka saat ini.
Jika Anda perlu masuk ke beberapa nomor QQ pada mesin yang sama, Anda dapat langsung membuka beberapa proses qqbot di terminal berbeda untuk masuk. Namun, setiap proses qqbot harus menyetel termServerPort dan httpServerPort sendiri (atau semuanya disetel ke 0 atau nilai kosong ), jika tidak, konflik nomor port akan terjadi.
Jika item debug diatur ke True, informasi debug akan dicetak saat dijalankan.
Umumnya, plug-in perlu disimpan di direktori impor sistem atau direktori ~/.qqbot-tmp/plugins. Anda dapat mengonfigurasi direktori penyimpanan lain di opsi pluginPath. Selain itu, pada opsi plugin, Anda dapat menentukan plugin yang perlu dimuat saat QQBot dimulai.
Semua opsi di file konfigurasi memiliki parameter baris perintah yang sesuai, dan opsi yang dimasukkan di parameter baris perintah memiliki prioritas lebih tinggi daripada opsi di file konfigurasi. Masukkan qqbot -h untuk melihat semua format parameter baris perintah.
Ada empat tingkat konfigurasi dalam program ini, dan prioritasnya adalah sebagai berikut:
使用 qqbot -u somebody 启动程序时,依次加载:
根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
使用 qqbot 启动程序时,依次加载:
根配置 -> 默认配置 -> 命令行参数配置
Diantaranya: konfigurasi root bersifat tetap dan tidak dapat diubah oleh pengguna; konfigurasi default dan konfigurasi pengguna dapat diubah oleh pengguna di file v2.x.conf dan terakhir, konfigurasi juga dapat dimasukkan dalam parameter baris perintah.
Saat qqbot berjalan, ia akan mencari/membuat file/direktori berikut di direktori kerja:
Direktori kerja default adalah ~/.qqbot-tmp/. Anda dapat menentukan direktori kerja lainnya melalui parameter baris perintah -b|--bench saat memulai qqbot, misalnya: qqbot -b bench.
Sebuah plug-in sebenarnya adalah modul python, sehingga bisa berupa file python atau paket python. qqbot akan mencari plug-in di direktori berikut berdasarkan nama plug-in:
metode hot-plug
Anda dapat memuat/membongkar plug-in secara dinamis selama menjalankan qqbot. Ada tiga metode:
Dua metode pertama dipanggil oleh proses eksternal dari proses qqbot, dan metode ketiga digunakan dalam proses qqbot. Jangan gunakan dua metode pertama di dalam proses qqbot.
Catatan: Plug-in yang dimuat menggunakan metode hot-plug akan hilang setelah qqbot dimulai ulang.
mode colok otomatis saat mulai
Anda juga dapat memuat plug-in secara otomatis ketika qqbot dimulai. Cukup tentukan nama plug-in yang perlu dimuat dalam opsi plugin di konfigurasi (parameter baris perintah -pl|--plugins). Plugin ini akan dimuat saat startup, sebelum login.
Selain itu, jika ada paket bernama qqbotdefault di sistem (atau di direktori plug-in), maka semua submodul di bawah paket tersebut akan secara otomatis dimuat sebagai plug-in saat startup (catatan: qqbotdefault sendiri tidak akan dimuat sebagai a plugin).
Penulisan plug-in terutama melibatkan penulisan fungsi panggilan balik atau fungsi tugas terjadwal. Lihat Bagian 4 hingga 6 untuk detailnya.
nama | penulis github | Deskripsi fungsi | Apakah akan memuat secara default |
---|---|---|---|
qqbot.plugins.sampleslots | pandolia | Contoh fungsi panggilan balik | Ya |
qqbot.plugins.schedrestart | pandolia | Mulai ulang terjadwal | Ya |
qqbot.plugins.miniirc | pandolia | server IRC | TIDAK |
kata sandi masuk | pandolia | Masuk menggunakan nama pengguna-kata sandi | TIDAK |
blok iklan | feisuweb | Pemblokiran iklan grup | TIDAK |
log obrolan | feisuweb | Catatan konten obrolan | TIDAK |
Jika Anda memiliki plugin berguna untuk dibagikan, kirimkan saya email.
Di bawah sistem Linux, karena klien QQ tidak dapat digunakan, plug-in qqbot.plugins.miniirc dapat digunakan untuk mengimplementasikan fungsi obrolan IRC. Metode pemuatan: qq plug qqbot.plugins.miniirc, atau muat saat startup: qqbot -pl qqbot.plugins.miniirc, atau tambahkan qqbot.plugins.miniirc
ke opsi plugin di file konfigurasi.
Setelah plug-in dimuat, server mikro IRC akan dibuka pada port 6667. Pengguna dapat menggunakan klien IRC (seperti weechat, irssi, dll.) untuk terhubung ke server ini guna mencapai obrolan dalam mode baris perintah. Berikut ini penggunaan weechat sebagai contoh untuk memperkenalkan cara menggunakannya:
启动 weechat : weechat
连接本服务器: /connect localhost
进入 群聊天 会话: /join group-name
进入 讨论组聊天 会话: /join !discuss-name
进入 好友聊天 会话: /query buddy-name
进入 聊天会话 后,直接敲入文本并回车就可以向对方发送消息了。所有接收到的 QQ 消息也会被转发给相应的 聊天会话 。
在聊天会话之间切换: ctrl+P 或 ctrl+N
显示所有 群和讨论组 的名称: /list
Di atas hampir semua fungsi yang disediakan oleh server mikro IRC ini, namun cukup untuk ngobrol dengan teman/grup/grup diskusi QQ.
QQBOT mengacu pada proyek sumber terbuka berikut:
Saya ingin mengucapkan terima kasih kepada tiga penulis di atas atas berbagi tanpa pamrih mereka, terutama Scienjus atas analisisnya yang mendalam dan terperinci dari protokol SmartQQ.