npm install --save wechat4u@latest
const Wechat = require ( 'wechat4u' )
let bot = new Wechat ( )
bot . start ( )
// 或使用核心API
// const WechatCore = require('wechat4u/lib/core')
git clone https://github.com/nodeWechat/wechat4u.git
cd wechat4u
npm install
npm run core // 命令行模式
npm run compile // babel编译
node run-core.js
Sehen Sie sich den Code für die Logik an, er ist prägnant und vollständig. Lesen Sie ihn unbedingt durch
let bot = new Wechat ( [ botData ] )
Wenn botData
übergeben wird, werden diese Roboterinformationen verwendet, um die vorherige Synchronisierung neu zu starten.
Alle Eigenschaften sind schreibgeschützt
Exportierbare Basisinformationen der Instanz Sie können diese Informationen eingeben und beim nächsten Erstellen eines neuen Bots erneut synchronisieren.
Notwendige Informationen, um eingeloggt zu bleiben
Konfigurationsinformationen, einschließlich aktueller Serveradresse, API-Pfad und einiger Konstanten
Das Programm muss die Konstanten in CONF verwenden, um den neuen Nachrichtentyp des aktuellen Status zu bestimmen.
bot . state == bot . CONF . STATE . init // 初始化状态
bot . state == bot . CONF . STATE . uuid // 已获取 UUID
bot . state == bot . CONF . STATE . login // 已登录
bot . state == bot . CONF . STATE . logout // 已退出登录
msg . MsgType == bot . CONF . MSGTYPE_TEXT // 文本消息
msg . MsgType == bot . CONF . MSGTYPE_IMAGE // 图片消息
msg . MsgType == bot . CONF . MSGTYPE_VOICE // 语音消息
msg . MsgType == bot . CONF . MSGTYPE_EMOTICON // 自定义表情消息
msg . MsgType == bot . CONF . MSGTYPE_MICROVIDEO // 小视频消息
msg . MsgType == bot . CONF . MSGTYPE_VIDEO // 视频消息
Aktueller Stand
Informationen zum aktuell angemeldeten Benutzer
Alle Kontakte, einschließlich Adressbuchkontakte, aktuelle Kontaktgruppen und öffentliche Konten
Der Schlüssel ist der Benutzername des Kontakts. Benutzername ist die UUID jedes Kontakts während dieser Anmeldung, sie ändert sich jedoch, wenn Sie sich das nächste Mal anmelden.
value ist ein Contact
. Informationen zu spezifischen Attributmethoden finden Sie unter src/interface/contact.js
Alle nach dem Login eingegangenen Nachrichten
msg ist ein Message
Objekt. Informationen zu bestimmten Attributmethoden finden Sie unter src/interface/message.js
Starten Sie eine Instanz, melden Sie sich an und bleiben Sie auf dem Laufenden
Verarbeiten Sie nach dem Aufruf dieser Methode die Nachricht, indem Sie das Ereignis abhören
Verwenden Sie die erforderlichen Informationen, die die Instanz erhalten hat, um sich erneut anzumelden und zu synchronisieren
Stoppen Sie die Instanz und melden Sie sich ab
Melden Sie sich nach dem Aufruf dieser Methode ab, indem Sie das logout
abhören
Passen Sie den Inhalt der Heartbeat-Nachricht an
Die getter
-Funktion gibt den Inhalt der Heartbeat-Nachricht zurück
typeof(getter())
sollte "string"
sein
bot . setRollingMessageGetter ( function ( ) {
//
return ( new Date ( ) ) . toJSON ( ) ;
} ) ;
Benutzerdefiniertes Heartbeat-Intervall
Die getter
-Funktion gibt das Heartbeat-Intervall in Millisekunden zurück
typeof(getter())
sollte "number"
sein
bot . setRollingIntervalGetter ( function ( ) {
return 2 * 60 * 1000 ;
} ) ;
Benutzerdefinierter Heartbeat-Zielbenutzer
Die getter
-Funktion gibt UserName
des Zielbenutzers zurück (in der Form @xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
).
typeof(getter())
sollte "string"
sein
Hinweis: Wenn Sie bot.user.UserName
verwenden möchten, müssen Sie den Zielbenutzer nach dem login
definieren
bot . setRollingmeGetter ( function ( ) {
return bot . user . UserName ;
} ) ;
Die folgenden Methoden geben alle Promise zurück
Senden Sie Textnachrichten, die Emojis (?) und QQ-Emoticons ([schlechtes Lächeln]) enthalten können.
Mediendateien hochladen
zurückkehren
{
name : name ,
size : size ,
ext : ext ,
mediatype : mediatype ,
mediaId : mediaId
}
Bilder senden, mediaId ist die von uploadMedia zurückgegebene mediaId
bot . uploadMedia ( fs . createReadStream ( 'test.png' ) )
. then ( res => {
return bot . sendPic ( res . mediaId , ToUserName )
} )
. catch ( err => {
console . log ( err )
} )
Senden Sie ein Emoticon, aber es ist das MD5 des Emoticon oder die von uploadMedia zurückgegebene mediaId.
Der MD5 des Emoticons kann von Ihnen selbst berechnet werden, ist jedoch möglicherweise nicht auf dem WeChat-Server vorhanden. Er kann auch aus der von WeChat zurückgegebenen Emoticon-Nachricht abgerufen werden.
Video senden
Senden Sie Dateien als Bewerbungskarten, und Sie können über diese API Stimmen senden
Die Kapselung der oben genannten Methode zum Senden von Nachrichten ist eine allgemeine Methode zum Senden von Nachrichten.
Wenn msg
eine Zeichenfolge ist, wird eine Textnachricht gesendet
Wenn msg
{file:xxx,filename:'xxx.ext'}
lautet, senden Sie die entsprechende Mediendatei
Wenn msg
{emoticonMd5:xxx}
ist, senden Sie ein Emoticon
bot . sendMsg ( {
file : request ( 'https://raw.githubusercontent.com/nodeWechat/wechat4u/master/bot-qrcode.jpg' ) ,
filename : 'bot-qrcode.jpg'
} , ToUserName )
. catch ( err => {
console . log ( err )
} )
Leiten Sie die Nachricht weiter. msg
msg
vom message
übergebene Nachrichtenobjekt
Nachricht zurückziehen
MsgID
ist die ID, die die nach dem Senden der Nachricht zurückgegebene Nachricht darstellt.
bot . sendMsg ( '测试撤回' , toUserName )
. then ( res => {
return bot . revokeMsg ( res . MsgID , toUserName )
} )
. catch ( err => {
console . log ( err )
} )
Holen Sie sich Kontakte aus dem Adressbuch
Seq
ist die Seq, die nach dem letzten Aufruf von bot.getContact zurückgegeben wird. Sie muss nicht beim ersten Aufruf übergeben werden.
Erhalten Sie bestimmte Kontaktdaten stapelweise
contacts
Array, das die abzurufenden Daten angibt
Wenn contacts
den Wert [{UserName: xxx}]
haben, können die angegebenen Kontakt- oder Gruppeninformationen abgerufen werden
Wenn contacts
den Wert [{UserName: xxx, EncryChatRoomId: xxx}]
haben, können detaillierte Informationen zu Mitgliedern in der angegebenen Gruppe abgerufen werden, und EncryChatRoomId kann aus den Gruppeninformationen abgerufen werden
Kontakt-Avatar erhalten
bot . getHeadImg ( bot . contacts [ UserName ] . HeadImgUrl ) . then ( res => {
fs . writeFileSync ( ` ${ UserName } .jpg` , res . data )
} ) . catch ( err => {
console . log ( err )
} )
Holen Sie sich ein Bild oder Emoticon
bot . getMsgImg ( msg . MsgId ) . then ( res => {
fs . writeFileSync ( ` ${ msg . MsgId } .jpg` , res . data )
} ) . catch ( err => {
console . log ( err )
} )
Holen Sie sich eine Stimme
Holen Sie sich kurze Videos oder Videos
Rufen Sie die Datei ab. Wenn MsgType
der Nachricht 49 und AppMsgType
6 ist, handelt es sich um eine Datei.
Freunde hinzufügen
UserName
kann im Allgemeinen aus Gruppeninformationen ermittelt werden
Informationen zur Content
Anfrage über Freund hinzufügen
Erstellen Sie eine Gruppe
Name des Topic
-Chats
MemberList
Array, Benutzername von mindestens zwei Personen außer Ihnen, das Format ist [ {"UserName":"@250d8d156ad9f8b068c2e3df3464ecf2"}, {"UserName":"@42d725733741de6ac53cbe3738d8dd2e"} ]
Gruppenmitglieder aktualisieren
ChatRoomUserName
Gruppenbenutzername beginnend mit „@@“
MemberList
Array, wenden Sie sich an UserNa
fun
optionale 'addmember', 'delmember', 'invitemember'
Gruppennamen aktualisieren
ChatRoomUserName
Gruppenbenutzername beginnt mit „@@“
NewName
Zeichenfolge, neuer Gruppenname
Einen Kontakt oben anheften oder loslösen Sie können die Gruppe „ChatRoomOwner“ erhalten, indem Sie die Gruppe direkt loslösen.
OP == 0 Lösen
OP == 1 gepinnt
Legen Sie Kontaktnotizen oder Beschriftungen fest
Nachdem Sie die UUID erhalten haben, können Sie einen QR-Code erstellen oder den QR-Code vom WeChat-Server abrufen.
bot . on ( 'uuid' , uuid => {
qrcode . generate ( 'https://login.weixin.qq.com/l/' + uuid , {
small : true
} )
console . log ( '二维码链接:' , 'https://login.weixin.qq.com/qrcode/' + uuid )
} )
Nach dem Scannen mit Ihrem Mobiltelefon können Sie die Daten-URL des Avatars des angemeldeten Benutzers abrufen.
Anmeldung per Handybestätigung
Erfolgreich abgemeldet
Kontaktaktualisierung: Sie können die aktualisierte Kontaktliste abrufen
Für alle durch Synchronisierung erhaltenen Nachrichten wird der Nachrichtentyp durch msg.MsgType
bot . on ( 'message' , msg => {
switch ( msg . MsgType ) {
case bot . CONF . MSGTYPE_STATUSNOTIFY :
break
case bot . CONF . MSGTYPE_TEXT :
break
case bot . CONF . MSGTYPE_RECALLED :
break
}
} )
Jeder Kontakt erbt von interface/contact und erweitert zusätzlich zum ursprünglichen JSON die folgenden Attribute:
contact . AvatarUrl // 处理过的头像地址
contact . isSelf // 是否是登录用户本人
contact . getDisplayName ( )
contact . canSearch ( keyword )
Darüber hinaus stellt wechat4u Contact als gemeinsame Schnittstelle für Kontakte auf der Instanz bereit und erweitert die folgenden Eigenschaften:
wechat . Contact . isRoomContact ( )
wechat . Contact . isSpContact ( )
wechat . Contact . isPublicContact ( )
wechat . Contact . getUserByUserName ( )
wechat . Contact . getSearchUser ( keyword )
Jedes msg-Objekt erbt von interface/message und verfügt zusätzlich zum ursprünglichen JSON über die folgenden Attribute:
message . isSendBySelf // 是否是本人发送
message . isSendBy ( contact )
message . getPeerUserName ( ) // 获取所属对话的联系人 UserName
message . getDisplayTime ( ) // 获取形如 12:00 的时间戳信息
Bezüglich der Implementierung von WeChat-Webrobotern gibt es bereits viele Überlegungen. Vielen Dank euch allen! (Die Rangfolge ist nicht in Ordnung. Die Sammlung muss ungerade sein.)
Zur Schnittstellenbeschreibung der WeChat-Webseite gibt es mehrere Artikel, die diese sehr gut analysieren.
MIT