# easyChat: WeChat PC desktop automation for scheduled sends and auto reply via Windows UI APIs

> easyChat drives the WeChat Windows desktop client through uiautomation, a Windows accessibility framework, to schedule messages, send to contact lists and run auto replies. It works only on Windows, requires a specific version match between the tool and the installed WeChat client, and exits silently on invalid input.

**LTEnjoy/easyChat** — A WeChat assistant (not the web WeChat version): scheduled messages, mass messaging, auto-reply and more.

- Repository: https://github.com/LTEnjoy/easyChat
- Stars: 1,507 · Forks: 207
- Language: Python
- License: not declared
- Published: 2026-10-11 · Updated: 2026-10-11 · Language: en
- Canonical page: https://hysenlabs.com/projects/ltenjoy-easychat

## easyChat replaces defunct web WeChat tools by driving the Windows desktop client directly

itchat and similar Python tools that automated WeChat worked by logging in through the web WeChat interface. Web WeChat login stopped being available, which rendered all of those tools non-functional. easyChat takes a different approach: it controls the WeChat Windows desktop client by reading and manipulating its UI elements through uiautomation, a Windows accessibility library.

This means easyChat is Windows-only by design. macOS and Linux users have no equivalent path, because the tool depends on Windows accessibility APIs and the Windows WeChat desktop application. The library in requirements.txt is uiautomation==2.0.17, which is a Python wrapper for Microsoft's UI Automation framework.

The 3 core features cover the most common automation scenarios for individual users: sending a message to multiple contacts at once (群发), scheduling a message to send at a future time (定时发送), and setting up automatic replies to incoming messages (自动回复).

## Windows Narrator mode must be enabled before the tool can read WeChat's UI tree

Before any feature works, Windows Narrator (讲述人) mode must be enabled. This is a Windows accessibility feature that exposes the UI automation tree to programs. Without it, uiautomation cannot read the WeChat interface's controls, so the tool cannot find the search box, the input field or the contact list.

The README's setup step 1 links to a specific GitHub page with instructions for enabling Narrator mode. That page is not reproduced in the main README body, so a new user who skips that link will miss the configuration step and the tool will fail to read WeChat's UI.

Once Narrator is active, the basic GUI workflow is: select the WeChat executable path, add contacts by their name as it appears in the search box, add content items in the order they should be sent, then optionally add scheduled times for delivery.

## Running from the prebuilt exe or rebuilding with python pack.py

For most users, the README header links directly to a prebuilt download of the latest exe. The wechat_gui.exe is already bundled in the repository, so no install step is needed to start using the GUI.

Developers who want to modify the source and rebuild the exe can do so with a single command from the project root.

```bash
python pack.py
```

This runs pack.py, which uses pyinstaller (pyinstaller==5.12.0 in requirements.txt) to package the Python source into a new exe. The requirements.txt file lists all dependencies with pinned values, including PyQt5==5.15.7, uiautomation==2.0.17, pywin32==304, numpy==1.23.3 and pandas==2.0.3 among others.

No pip install command is given in the README. The requirements.txt exists for developers who want to run the source directly, but the specific install invocation is left to the reader to supply.

## versions/ holds 1 Python file per supported WeChat build; WeChat 4.1.8 is the minimum

easyChat handles WeChat's update cycles through a directory called versions/. Each Python file in that directory corresponds to a specific WeChat desktop build, named by its number (for example, wechat_4_1_9_21.py). The __init__.py in versions/ acts as a registry, loading the correct implementation at startup based on which WeChat build the user selects in the interface.

When calling the code API, the README instructs users to enter the versions/ directory and call functions from the file that matches their installed WeChat build. Calling a function from a mismatched file will fail to control the client correctly, because each file contains the specific UI element paths for that particular WeChat build.

WeChat 4.1.8 is the minimum supported build, and WeChat 4.1.15 is the newest build covered, with its Python file added in September 2026. When Tencent ships a new WeChat build that rearranges UI elements, existing files stop working for that build until a new file is added to versions/.

## 8 code API functions cover sending, retrieving contacts and extracting chat history

Beyond the GUI, easyChat exposes 8 Python functions for programmatic use:

- send_msg(): search for a contact by username and send a message, with optional @mention support in group chats
- send_file(): search for a contact and send a file
- find_all_contacts(): retrieve all contacts in the address book
- check_new_msg(): detect new incoming messages automatically
- set_auto_reply(): configure which contacts receive automatic replies
- get_dialogs(): retrieve the chat history from a specified chat window
- save_dialog_pictures(): extract images and videos from a chat window's history
- get_current_name(): get the display name of whoever is in the current open chat

All of these must be called from within the build-specific file in versions/ that matches the installed WeChat desktop client. The README notes that the code inside those files is lightly commented and designed for users who want to customize beyond the GUI.

## Invalid input causes silent exit; the README acknowledges this as an ostrich policy

Input validation in easyChat is minimal by the author's own description. The README's feature section includes a note that the program exits automatically if input is not in the correct format. The reasoning given is that handling every edge case is too much work, so the code uses an ostrich policy instead.

In practice, this means the scheduled time format and the content file format must be followed exactly. A misformatted entry in a users txt file or a content txt file, or a time string that deviates from the expected pattern, will cause the program to exit rather than skip the bad entry or show a useful error.

The content txt file format requires each line to start with either all: (to send to all users) or a comma-separated list of 1-indexed user numbers (such as 1,2,3), followed by a colon, then the message. Different columns must be separated by an English colon. Deviating from this structure triggers the exit behavior described in the README.

## pandas in requirements.txt has no documented role; the anti-disconnect feature fires hourly

requirements.txt includes pandas==2.0.3 alongside the UI automation and GUI libraries. No file description or commit comment explains what pandas is used for in a WeChat messaging tool. It is present in the pinned dependency list without documentation.

The anti-disconnect feature (防止自动下线) simulates activity every 1 hour to prevent WeChat from logging out automatically. A 2026/04/09 fix addressed a crash that occurred when this feature was enabled. That crash was resolved in the same update. The feature can be toggled with a button in the GUI.

The last push was on 2026-09-15; no licence file is listed in the repository entries.

## Conclusion

easyChat is worth running if you use WeChat's Windows desktop client and want basic automation: scheduled messages, contact-list group sends, and auto replies without writing Windows accessibility code yourself. Skip it if your WeChat client updates frequently and you cannot wait for the tool to catch up, because each client build needs its own Python file in versions/ before anything works. Before running it, check that your installed WeChat build appears in the versions/ directory, follow the Narrator mode setup linked in step 1 of the README's usage guide, and confirm that ctrl + alt + q stops an in-progress send before you run any bulk operation.

## FAQ

### What is easyChat and what does it do?

easyChat is a Windows tool that automates the WeChat desktop client using Windows UI accessibility APIs. It supports scheduled message sending, mass messaging to contact lists, and auto reply, through both a GUI and a Python code API.

### Does easyChat work on macOS or Linux?

No. easyChat depends on uiautomation, a Windows accessibility library, and the WeChat Windows desktop client. There is no macOS or Linux support documented anywhere in the project.

### Which WeChat build does easyChat support?

The minimum supported WeChat build is 4.1.8. WeChat 4.1.15 is the newest supported build, with its Python file added in September 2026. Each supported build has its own Python file in the versions/ directory.

### How do I install easyChat?

Download the prebuilt wechat_gui.exe from the project's download link in the README header. To rebuild from source, install the dependencies from requirements.txt and run python pack.py to generate a new exe.

### Why does easyChat exit without showing an error message?

The README acknowledges that input validation exits the program on format errors instead of showing a detailed error, calling this an ostrich policy. Input in the users txt file and the content txt file must follow the exact format described in the README's usage guide.

## Sources

- [Issues](https://github.com/LTEnjoy/easyChat/issues)
- [LTEnjoy/easyChat on GitHub](https://github.com/LTEnjoy/easyChat)
- [README](https://github.com/LTEnjoy/easyChat/blob/main/README.md)
- [Releases](https://github.com/LTEnjoy/easyChat/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/ltenjoy-easychat
