npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

itchat4js

v2.0.4

Published

wechat itchat api robot weixin personal extend

Downloads

3

Readme

ItChat4JS

ItChat4JS -- 用NodeJs扩展个人微信号的能力

ItChat是一个非常优秀的开源微信个人号接口,使用Python语言开发,提供了简单易用的API,可以很方便地对个人微信号进行扩展,实现自动回复,微信挂机机器人等。 通过阅读和学习ItChat python源码,通过NodeJs完成了一个JS版本,由于主要灵感来源于itchat项目,所以这个项目的就暂时定名为ItChat4JS吧。

安装

可以通过本命令安装ItChat4JS:

npm install itchat4js

重要更新---2021-11-05

桌面版本微信 hack某些微信号天生无法网页登录的缺陷

    // 启动的时候只需要增加desktopMode为true即可
    itChat4JsIns.login({ desktopMode: true});

或者

    // 启动的时候只需要增加desktopMode为true即可
    itChat4JsIns.run({ desktopMode: true});

简单入门实例

有了ItChat4JS,如果你想要给文件传输助手发一条信息,只需要这样:

import ItChat4JS, { sendTextMsg } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    await sendTextMsg('Hello FileHelper', 'filehelper');
};

doFn();

如果你想要回复发给自己的文本消息,只需要这样:

import ItChat4JS, { sendTextMsg, EMIT_NAME, MESSAGE_TYPE  } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

itChat4JsIns.listen(EMIT_NAME.FRIEND, MESSAGE_TYPE.TEXT, async (msgInfo, toUserInfo) => {
    const { text } = msgInfo;
    const { UserName } = toUserInfo;
    sendTextMsg(text, UserName)
});

itChat4JsIns.run();

消息来源分类

import { EMIT_NAME } from 'itchat4js';
console.log('消息来源分类', EMIT_NAME)

FRIEND:来自于微信好友的消息 CHAT_ROOM:来自于群聊的消息 MASSIVE_PLATFORM:来自于公众号、订阅号的消息

消息类型分类

import { MESSAGE_TYPE } from 'itchat4js';
console.log('消息类型分类', MESSAGE_TYPE)

TEXT:文本消息 MAP:地图、位置消息 CARD:名片 NOTE:笔记 SHARING:分享 PICTURE:图片 RECORDING: VOICE:语音 ATTACHMENT:附件文件 VIDEO:视频 FRIENDS:添加好友申请 SYSTEM:系统消息

各类型消息的注册

import ItChat4JS, { sendTextMsg, EMIT_NAME, MESSAGE_TYPE  } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const msgArr = [
    MESSAGE_TYPE.TEXT,
    MESSAGE_TYPE.PICTURE,
    MESSAGE_TYPE.FRIENDS,
    MESSAGE_TYPE.VIDEO,
];

itChat4JsIns.listen(EMIT_NAME.FRIEND, msgArr, async (msgInfo, toUserInfo) => {
    const { text, type, download } = msgInfo;
    if (type === MESSAGE_TYPE.PICTURE) {
        await download('download/friend/image');
    } else if (type === MESSAGE_TYPE.FRIENDS) {
        const { status, verifyContent, autoUpdate: { UserName } } = text;
        itChat4JsIns.verifyFriend(UserName, status, verifyContent)
    } else if (type === MESSAGE_TYPE.TEXT) {
        console.log(text)
    } else if (type === MESSAGE_TYPE.VIDEO) {
        await download('download/friend/video');
    }
});

itChat4JsIns.run();

常用的方法及使用

实例方法

1.登录 async itChat4JsIns.login()

异步方法,用户扫码登录,receiving:是否自动接收消息,默认false

import ItChat4JS from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
};

doFn();

2.监听消息 listen(emitName, msgType, callback)

emitName:消息来源,参见EMIT_NAME msgType: 消息类型,MESSAGE_TYPE。可以是string也可以是Array,也可以undefined或null callback:处理消息的实际操作

callback参数:msgInfo, toUserInfo msgInfo:经过处理之后的消息信息,包含: text:文本内容 type:消息信息 filename:文件名 async download(path='', filename='', toStream=false):下载 download 异步下载,可以指定下载路径和文件名。path不传,会以项目根路径为目录下载,filename不传会自动生成,下载之后不保存,以stream的形式返回,默认值false(目前还不支持)

import ItChat4JS, { sendTextMsg, EMIT_NAME, MESSAGE_TYPE  } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

itChat4JsIns.listen(EMIT_NAME.FRIEND, MESSAGE_TYPE.TEXT, async (msgInfo, toUserInfo) => {
    const { text } = msgInfo;
    const { UserName } = toUserInfo;
    sendTextMsg(text, UserName)
});

itChat4JsIns.run();

3.好友添加及验证 async verifyFriend(userName, status = 2, verifyContent = '', verifyUserTicket = '', autoUpdate = true)

userName:申请加好友的UserName status: 操作类型,默认值为2。2:添加好友,3:验证好友申请 verifyContent:添加和被添加的验证内容 verifyUserTicket: 用户的ticket autoUpdate:是否更新本地好友信息,默认值为true

import ItChat4JS, { EMIT_NAME, MESSAGE_TYPE  } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

itChat4JsIns.listen(EMIT_NAME.FRIEND, MESSAGE_TYPE.FRIENDS, async (msgInfo, toUserInfo) => {
    const { text } = msgInfo;
    const { status, verifyContent, autoUpdate: { UserName } } = text;
    itChat4JsIns.verifyFriend(UserName, status, verifyContent)
});

itChat4JsIns.run();

4.通过UserName,NickName或者RemarkName获取好友信息 getContactInfoByName(name)

name:UserName或者NickName

import ItChat4JS from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    console.log(itChat4JsIns.getContactInfoByName('xxx'));
};

doFn()

5.设置好友备注 async setAlias(userName, alias = '')

userName:UserName,NickName或RemarkName alias:备注

import ItChat4JS from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const info = itChat4JsIns.getContactInfoByName('xxx');
    itChat4JsIns.setAlias(info.UserName, '备注名称');
};

doFn()

6.设置群组,好友置顶 async setPinned(userName, isPinned = true)

userName:UserName,NickName或RemarkName isPinned:是否置顶

import ItChat4JS from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const info = itChat4JsIns.getContactInfoByName('xxx');
    itChat4JsIns.setPinned(info.UserName, true);
};

doFn()

7.创建群聊 async createChatRoom(memberList, topic = '')

memberList:用户列表([{UserName: 'xxx}]) topic:群名称

import ItChat4JS from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const userArr = itChat4JsIns.getContactInfoByName(['AAA', 'BBB']);
    itChat4JsIns.createChatRoom(userArr, '群聊名称');
};

doFn()

8.设置群聊名称 async setChatRoomName(chatRoomUserName, name) {

chatRoomUserName:群UserName name:群名称

import ItChat4JS from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const info = itChat4JsIns.getContactInfoByName('XXX');
    itChat4JsIns.setChatRoomName(info.UserName, '群聊名称');
};

doFn()

9.删除群成员 async deleteMemberFromChatRoom(chatRoomUserName, memberList) {

Tip:删除群成员总是返回Ret:1不成功(网页版也不成功)

chatRoomUserName:群UserName memberList:用户列表([{UserName: 'xxx}])

import ItChat4JS from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const userArr = NodeWeChatIns.getContactInfoByName(['AAA', 'BBB']);
    const info = itChat4JsIns.getContactInfoByName('XXX');
    itChat4JsIns.deleteMemberFromChatRoom(info.UserName, userArr);
};

doFn()

10.添加群成员 async addMemberIntoChatRoom(chatRoomUserName, memberList, useInvitation = false) {

chatRoomUserName:群UserName memberList:用户列表([{UserName: 'xxx}]) useInvitation:是否以发出邀请的形式

import ItChat4JS from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
   const userArr = NodeWeChatIns.getContactInfoByName(['AAA', 'BBB']);
    const info = itChat4JsIns.getContactInfoByName('XXX');
    itChat4JsIns.addMemberIntoChatRoom(info.UserName, userArr, true);
};

doFn()

静态方法

1.发送文件 async sendFile(fileDir, toUserName, mediaId, streamInfo = {})

异步方法,向指定好友发送文件。一般需要两步:1、上传,2、发送消息

两种方式发送:1、传入文件路径,自动上传和发送。2、传入stream信息,自动上传和发送

fileDir:发送的文件所在路径 toUserName:发送的好友UserName mediaId:上传文件之后返回的MediaId streamInfo:文件流信息,包含:fileReadStream文件流,filename文件名,extName文件扩展名

import ItChat4JS, { sendFile } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    await sendFile('./file/txt.txt', 'filehelper');
};

doFn();

或者

import ItChat4JS, { sendFile } from 'itchat4js';

import fs from 'fs';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const stream = fs.createReadStream('./file/txt.txt');
    const streamInfo = {
        fileReadStream: stream,
        filename: 'txt.txt',
        extName: '.txt'
    };
    sendFile(null, 'filehelper', null, streamInfo)
};

doFn()

2.发送图片 async sendImage(fileDir, toUserName, mediaId, streamInfo = {})

异步方法,向指定好友发送图片。一般需要两步:1、上传,2、发送消息

两种方式发送:1、传入文件路径,自动上传和发送。2、传入stream信息,自动上传和发送

fileDir:发送的文件所在路径 toUserName:发送的好友UserName mediaId:上传文件之后返回的MediaId streamInfo:文件流信息,包含:fileReadStream文件流,filename文件名,extName文件扩展名

import ItChat4JS, { sendImage } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    await sendImage('./file/img.png', 'filehelper');
};

doFn();

或者

import ItChat4JS, { sendImage } from 'itchat4js';

import fs from 'fs';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const stream = fs.createReadStream('./file/img.png');
    const streamInfo = {
        fileReadStream: stream,
        //filename: 'img.png',
        extName: '.png'
    };
    sendImage(null, 'filehelper', null, streamInfo)
};

doFn()

3.发送视频 async sendVideo(fileDir, toUserName, mediaId, streamInfo = {})

异步方法,向指定好友发送视频。一般需要两步:1、上传,2、发送消息

两种方式发送:1、传入文件路径,自动上传和发送。2、传入stream信息,自动上传和发送

fileDir:发送的文件所在路径 toUserName:发送的好友UserName mediaId:上传文件之后返回的MediaId streamInfo:文件流信息,包含:fileReadStream文件流,filename文件名,extName文件扩展名

import ItChat4JS, { sendVideo } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    await sendVideo('./file/video.mp4', 'filehelper');
};

doFn();

或者

import ItChat4JS, { sendVideo } from 'itchat4js';

import fs from 'fs';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const stream = fs.createReadStream('./file/video.mp4');
    const streamInfo = {
        fileReadStream: stream,
        //filename: 'video.mp4',
        //extName: '.mp4'
    };
    sendVideo(null, 'filehelper', null, streamInfo)
};

doFn()

4.发送文本 async sendTextMsg(msg, toUserName)

msg:文本内容 toUserName:发送的好友UserName

import ItChat4JS, { sendTextMsg } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    await sendTextMsg('Hello File Helper', 'filehelper');
};

doFn();

4.撤回发送的消息 async revokeMsg(msgId, toUserName, localId)

import ItChat4JS, { revokeMsg } from 'itchat4js';

const itChat4JsIns = new ItChat4JS();

const doFn = async () => {
    await itChat4JsIns.login();
    const {MsgID, LocalID} =  await sendTextMsg('Hello File Helper', 'filehelper');
    revokeMsg(res.MsgID, username, res.LocalID);
};

doFn();

Demo

稍等片刻,正在整理中...

类似项目

itchat :优秀的、基于Python的微信个人号API,同时也是本项目的灵感之源。

WeixinBot: 网页版微信API,包含终端版微信及微信机器人

致谢:

感谢ItChat的开源,感谢ItChat作者

LittleCoder: 构架及维护Python2 Python3版本。

tempdban: 协议、构架及日常维护。

Chyroc: 完成第一版本的Python3构架。

问题和建议

本项目长期更新、维护,功能不断扩展与完善中,欢迎star。

项目使用过程中遇到问题,或者有好的建议,欢迎随时反馈。

任何问题或者建议都可以在Issue中提出来,也可以添加作者微信号kobezsj进行讨论。