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
Veja o código para lógica, é conciso e completo, não deixe de lê-lo
let bot = new Wechat ( [ botData ] )
Se botData
for passado, essas informações do robô serão usadas para reiniciar a sincronização anterior.
Todas as propriedades são somente leitura
Informações básicas exportáveis da instância Você pode preencher essas informações e sincronizá-las novamente na próxima vez que criar um novo bot.
Informações necessárias para permanecer logado
Informações de configuração, incluindo endereço atual do servidor, caminho da API e algumas constantes
O programa precisa usar as constantes em CONF para determinar o novo tipo de mensagem do status atual.
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 // 视频消息
Estado atual
Informações atuais do usuário conectado
Todos os contatos, incluindo contatos do catálogo de endereços, grupos de contatos recentes e contas públicas
A chave é o contato UserName é o UUID de cada contato durante esse login, mas será alterado na próxima vez que você fizer login.
value é um objeto Contact
. Para métodos de atributos específicos, consulte src/interface/contact.js
Todas as mensagens recebidas após o login
msg é um objeto Message
. Para métodos de atributos específicos, consulte src/interface/message.js
Inicie uma instância, faça login e fique sincronizado
Depois de chamar este método, processe a mensagem ouvindo o evento
Use as informações necessárias que a instância obteve para fazer login novamente e sincronizar
Pare a instância e efetue logout
Depois de chamar esse método, efetue logout ouvindo o evento logout
Personalize o conteúdo da mensagem de pulsação
A função getter
retorna o conteúdo da mensagem de pulsação
typeof(getter())
deve ser "string"
bot . setRollingMessageGetter ( function ( ) {
//
return ( new Date ( ) ) . toJSON ( ) ;
} ) ;
Intervalo de pulsação personalizado
A função getter
retorna o intervalo de pulsação em milissegundos
typeof(getter())
deve ser "number"
bot . setRollingIntervalGetter ( function ( ) {
return 2 * 60 * 1000 ;
} ) ;
Usuário alvo de pulsação personalizado
A função getter
retorna UserName
do usuário de destino (na forma de @xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
)
typeof(getter())
deve ser "string"
Nota: Se quiser usar bot.user.UserName
, você precisa definir o usuário alvo após o evento login
bot . setRollingmeGetter ( function ( ) {
return bot . user . UserName ;
} ) ;
Todos os métodos a seguir retornam Promise
Envie mensagens de texto, que podem incluir emoji (?) e emoticons QQ ([sorriso ruim])
Carregar arquivos de mídia
retornar
{
name : name ,
size : size ,
ext : ext ,
mediatype : mediatype ,
mediaId : mediaId
}
Envie fotos, mediaId é o mediaId retornado por uploadMedia
bot . uploadMedia ( fs . createReadStream ( 'test.png' ) )
. then ( res => {
return bot . sendPic ( res . mediaId , ToUserName )
} )
. catch ( err => {
console . log ( err )
} )
Envie um emoticon, mas é o MD5 do emoticon ou o mediaId retornado por uploadMedia.
O MD5 do emoticon pode ser calculado por você mesmo, mas pode não existir no servidor WeChat. Também pode ser obtido a partir da mensagem do emoticon retornada pelo WeChat.
Enviar vídeo
Envie arquivos na forma de cartões de inscrição e você pode enviar vozes por meio desta API
O encapsulamento do método de envio de mensagens acima é um método geral de envio de mensagens.
Quando msg
é string, envie mensagem de texto
Quando msg
for {file:xxx,filename:'xxx.ext'}
, envie o arquivo de mídia correspondente
Quando msg
for {emoticonMd5:xxx}
, envie o 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 )
} )
Encaminhe a mensagem, msg
msg
passado pelo evento message
Retirar mensagem
MsgID
é o ID que representa a mensagem retornada após o envio da mensagem.
bot . sendMsg ( '测试撤回' , toUserName )
. then ( res => {
return bot . revokeMsg ( res . MsgID , toUserName )
} )
. catch ( err => {
console . log ( err )
} )
Obtenha contatos do catálogo de endereços
Seq
é o seq retornado após a última chamada para bot.getContact. Não precisa ser passado na primeira chamada.
Obtenha dados de contato especificados em lotes
array contacts
, especificando os dados a serem obtidos
Quando contacts
são [{UserName: xxx}]
, as informações de contato ou grupo especificadas podem ser obtidas
Quando contacts
são [{UserName: xxx, EncryChatRoomId: xxx}]
, informações detalhadas dos membros do grupo especificado podem ser obtidas e EncryChatRoomId pode ser obtido nas informações do grupo
Obter avatar de contato
bot . getHeadImg ( bot . contacts [ UserName ] . HeadImgUrl ) . then ( res => {
fs . writeFileSync ( ` ${ UserName } .jpg` , res . data )
} ) . catch ( err => {
console . log ( err )
} )
Obtenha uma foto ou emoticon
bot . getMsgImg ( msg . MsgId ) . then ( res => {
fs . writeFileSync ( ` ${ msg . MsgId } .jpg` , res . data )
} ) . catch ( err => {
console . log ( err )
} )
Obter voz
Obtenha vídeos curtos ou vídeos
Obtenha o arquivo Quando MsgType
da mensagem for 49 e AppMsgType
for 6, é um arquivo.
Adicionar amigos
UserName
geralmente pode ser obtido a partir de informações do grupo
Informações de verificação Content
Adicionar solicitação via amigo
Crie um grupo
Nome do bate-papo do grupo de Topic
Matriz MemberList
, nome de usuário de pelo menos duas pessoas além de você, o formato é [ {"UserName":"@250d8d156ad9f8b068c2e3df3464ecf2"}, {"UserName":"@42d725733741de6ac53cbe3738d8dd2e"} ]
Atualizar membros do grupo
ChatRoomUserName
Nome de usuário do grupo começando com '@@'
Matriz MemberList
, entre em contato com UserNa
fun
opcional 'addmember', 'delmember', 'invitemember'
Atualizar nome do grupo
ChatRoomUserName
Nome de usuário do grupo começando com '@@'
String NewName
, novo nome do grupo
Fixar ou desafixar um contato no topo Você pode obter o grupo ChatRoomOwner desafixando o grupo diretamente.
OP == 0 Desafixar
OP == 1 fixado
Definir notas ou rótulos de contato
Depois de obter o uuid, você pode construir um código QR ou obter o código QR do servidor WeChat.
bot . on ( 'uuid' , uuid => {
qrcode . generate ( 'https://login.weixin.qq.com/l/' + uuid , {
small : true
} )
console . log ( '二维码链接:' , 'https://login.weixin.qq.com/qrcode/' + uuid )
} )
Após digitalizar com seu celular, você pode obter o URL de dados do avatar do usuário logado.
Login de confirmação do celular
Desconectado com sucesso
Atualização de contato, você pode obter a lista de contatos atualizada
Para todas as mensagens obtidas por meio de sincronização, o tipo de mensagem é determinado por 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
}
} )
Cada contato herda de interface/contato e estende os seguintes atributos além do json original:
contact . AvatarUrl // 处理过的头像地址
contact . isSelf // 是否是登录用户本人
contact . getDisplayName ( )
contact . canSearch ( keyword )
Além disso, wechat4u fornece Contact como uma interface comum para contatos na instância, estendendo as seguintes propriedades:
wechat . Contact . isRoomContact ( )
wechat . Contact . isSpContact ( )
wechat . Contact . isPublicContact ( )
wechat . Contact . getUserByUserName ( )
wechat . Contact . getSearchUser ( keyword )
Cada objeto msg herda de interface/message e possui os seguintes atributos além do json original:
message . isSendBySelf // 是否是本人发送
message . isSendBy ( contact )
message . getPeerUserName ( ) // 获取所属对话的联系人 UserName
message . getDisplayTime ( ) // 获取形如 12:00 的时间戳信息
Em relação à implementação dos robôs web WeChat, já existem muitas rodas. Obrigado a todos! (A classificação não está em ordem. A coleção deve ser desigual.)
Em relação à descrição da interface da página WeChat, existem vários artigos que a analisam muito bem.
MIT