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입니다. UserName은 이 로그인 중 각 연락처의 UUID이지만 다음에 로그인할 때 변경됩니다.
값은 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
message
이벤트에 의해 전달된 msg
객체입니다.
메시지 철회
MsgID
메시지를 보낸 후 반환된 메시지를 나타내는 ID입니다.
bot . sendMsg ( '测试撤回' , toUserName )
. then ( res => {
return bot . revokeMsg ( res . MsgID , toUserName )
} )
. catch ( err => {
console . log ( err )
} )
주소록에서 연락처 가져오기
Seq
는 bot.getContact에 대한 마지막 호출 이후 반환된 seq입니다. 첫 번째 호출에서는 전달될 필요가 없습니다.
지정된 연락처 데이터를 일괄적으로 가져오기
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, 형식은 [ {"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는 인스턴스의 연락처에 대한 공통 인터페이스로 연락처를 제공하여 다음 속성을 확장합니다.
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 웹 로봇의 구현과 관련하여 이미 많은 바퀴가 있습니다. 모두 감사합니다! (순위는 순서가 없습니다. 컬렉션이 고르지 않아야 합니다.)
WeChat 웹페이지의 인터페이스 설명과 관련하여 이를 매우 잘 분석한 여러 기사가 있습니다.
MIT