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
ロジックについてはコードを参照してください。簡潔で完全です。必ず読んでください。
let bot = new Wechat ( [ botData ] )
botData
が渡されると、このロボット情報は前の同期を再開するために使用されます。
すべてのプロパティは読み取り専用です
インスタンスのエクスポート可能な基本情報。次回新しいボットを作成するときにこの情報を入力して再同期できます。
ログイン状態を維持するために必要な情報
現在のサーバーアドレス、API パス、およびいくつかの定数を含む構成情報
プログラムは、CONF の定数を使用して、現在のステータスの新しいメッセージ タイプを決定する必要があります。
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 // 视频消息
現在の状況
現在ログインしているユーザー情報
アドレス帳の連絡先、最近の連絡先グループ、公開アカウントを含むすべての連絡先
キーは連絡先です。UserName は、このログイン時の各連絡先の UUID ですが、次回ログイン時に変更されます。
value はContact
オブジェクトです。特定の属性メソッドについては、 src/interface/contact.js
参照してください。
ログイン後に受信したすべてのメッセージ
msg はMessage
オブジェクトです。特定の属性メソッドについては、 src/interface/message.js
参照してください。
インスタンスを起動し、ログインして同期を維持します
このメソッドを呼び出した後、イベントをリッスンしてメッセージを処理します。
インスタンスが取得した必要な情報を使用して、再度ログインして同期します。
インスタンスを停止してログアウトする
このメソッドを呼び出した後、 logout
イベントをリッスンしてログアウトします。
ハートビートメッセージの内容をカスタマイズする
getter
関数はハートビート メッセージの内容を返します。
typeof(getter())
"string"
である必要があります
bot . setRollingMessageGetter ( function ( ) {
//
return ( new Date ( ) ) . toJSON ( ) ;
} ) ;
カスタムハートビート間隔
getter
関数はハートビート間隔をミリ秒単位で返します。
typeof(getter())
"number"
である必要があります
bot . setRollingIntervalGetter ( function ( ) {
return 2 * 60 * 1000 ;
} ) ;
カスタムハートビートターゲットユーザー
getter
関数は、ターゲット ユーザーのUserName
( @xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
の形式) を返します。
typeof(getter())
"string"
である必要があります
注: bot.user.UserName
を使用する場合は、 login
イベントの後にターゲット ユーザーを定義する必要があります。
bot . setRollingmeGetter ( function ( ) {
return bot . user . UserName ;
} ) ;
次のメソッドはすべて Promise を返します
絵文字 (?) や QQ 絵文字 ([悪い笑顔]) を含むテキスト メッセージを送信します。
メディアファイルをアップロードする
戻る
{
name : name ,
size : size ,
ext : ext ,
mediatype : mediatype ,
mediaId : mediaId
}
写真を送信します。mediaId は、uploadMedia によって返された mediaId です。
bot . uploadMedia ( fs . createReadStream ( 'test.png' ) )
. then ( res => {
return bot . sendPic ( res . mediaId , ToUserName )
} )
. catch ( err => {
console . log ( err )
} )
絵文字を送信しますが、それは絵文字の MD5 か、uploadMedia によって返される mediaId です。
絵文字の MD5 は自分で計算できますが、WeChat サーバーに存在しない場合もあります。WeChat から返された絵文字メッセージから取得することもできます。
ビデオを送信する
アプリケーションカード形式でファイルを送信し、この API を通じて音声を送信できます
上記のメッセージ送信方法のカプセル化は、一般的なメッセージ送信方法です。
msg
が文字列の場合、テキストメッセージを送信します
msg
が{file:xxx,filename:'xxx.ext'}
の場合、対応するメディア ファイルを送信します
msg
が{emoticonMd5:xxx}
の場合、絵文字を送信します
bot . sendMsg ( {
file : request ( 'https://raw.githubusercontent.com/nodeWechat/wechat4u/master/bot-qrcode.jpg' ) ,
filename : 'bot-qrcode.jpg'
} , ToUserName )
. catch ( err => {
console . log ( err )
} )
メッセージを転送します。msg msg
message
イベントによって渡されるmsg
オブジェクトです。
メッセージの撤回
MsgID
メッセージを送信した後に返されるメッセージを表す ID です。
bot . sendMsg ( '测试撤回' , toUserName )
. then ( res => {
return bot . revokeMsg ( res . MsgID , toUserName )
} )
. catch ( err => {
console . log ( err )
} )
アドレス帳から連絡先を取得する
Seq
、bot.getContact への最後の呼び出し後に返されたシーケンスです。最初の呼び出しで渡す必要はありません。
指定した連絡先データを一括取得
取得するデータを指定するcontacts
配列
contacts
が[{UserName: xxx}]
の場合、指定した連絡先またはグループの情報を取得できます
contacts
先が[{UserName: xxx, EncryChatRoomId: xxx}]
の場合、指定したグループ内のメンバーの詳細情報を取得でき、グループ情報から EncryChatRoomId を取得できます
連絡先アバターを取得
bot . getHeadImg ( bot . contacts [ UserName ] . HeadImgUrl ) . then ( res => {
fs . writeFileSync ( ` ${ UserName } .jpg` , res . data )
} ) . catch ( err => {
console . log ( err )
} )
写真や絵文字を取得する
bot . getMsgImg ( msg . MsgId ) . then ( res => {
fs . writeFileSync ( ` ${ msg . MsgId } .jpg` , res . data )
} ) . catch ( err => {
console . log ( err )
} )
音声を取得
短いビデオやビデオを取得する
ファイルを取得します。メッセージのMsgType
が 49、 AppMsgType
が 6 の場合、それはファイルです。
友達を追加
UserName
通常、グループ情報から取得できます。
Content
確認情報
友達経由でリクエストを追加
グループを作成する
Topic
グループチャット名
MemberList
配列、自分以外の少なくとも 2 人のユーザー名、形式は [ {"UserName":"@250d8d156ad9f8b068c2e3df3464ecf2"}, {"UserName":"@42d725733741de6ac53cbe3738d8dd2e"} ] です。
グループメンバーを更新する
ChatRoomUserName
「@@」で始まるグループ ユーザー名
MemberList
配列、UserNa に連絡してください
fun
オプションの「addmember」、「delmember」、「invitemember」
グループ名を更新する
ChatRoomUserName
「@@」で始まるグループ ユーザー名
NewName
文字列、新しいグループ名
連絡先を上部に固定または固定解除する グループの固定を直接解除することで、グループ ChatRoomOwner を取得できます。
OP == 0 固定を解除
OP == 1 固定
連絡先メモまたはラベルを設定する
uuid を取得したら、QR コードを作成するか、WeChat サーバーから QR コードを取得できます。
bot . on ( 'uuid' , uuid => {
qrcode . generate ( 'https://login.weixin.qq.com/l/' + uuid , {
small : true
} )
console . log ( '二维码链接:' , 'https://login.weixin.qq.com/qrcode/' + uuid )
} )
携帯電話でスキャンすると、ログインしているユーザーのアバターのデータ URL を取得できます。
携帯電話認証ログイン
正常にログアウトされました
連絡先の更新、更新された連絡先リストを取得できます
同期を通じて取得されたすべてのメッセージのメッセージ タイプは、 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
}
} )
各連絡先はインターフェイス/連絡先を継承し、元の JSON に加えて次の属性を拡張します。
contact . AvatarUrl // 处理过的头像地址
contact . isSelf // 是否是登录用户本人
contact . getDisplayName ( )
contact . canSearch ( keyword )
さらに、wechat4u は、インスタンス上の連絡先の共通インターフェイスとして Contact を提供し、次のプロパティを拡張します。
wechat . Contact . isRoomContact ( )
wechat . Contact . isSpContact ( )
wechat . Contact . isPublicContact ( )
wechat . Contact . getUserByUserName ( )
wechat . Contact . getSearchUser ( keyword )
各 msg オブジェクトはインターフェイス/メッセージを継承し、元の json に加えて次の属性を持ちます。
message . isSendBySelf // 是否是本人发送
message . isSendBy ( contact )
message . getPeerUserName ( ) // 获取所属对话的联系人 UserName
message . getDisplayTime ( ) // 获取形如 12:00 的时间戳信息
WeChat Web ロボットの実装に関しては、すでに多くの車輪が存在します。皆さんありがとうございました! (順位は順不同です。コレクションが偏っているはずです。)
WeChat Web ページのインターフェースの説明については、非常によく分析した記事がいくつかあります。
マサチューセッツ工科大学