Git Product home page Git Product logo

easychat's Introduction

easyChat

PC端微信助手(非web微信版):定时发送信息;群发信息;自动回复等。

最新编辑日期:2024/05/08

有疑问推荐在Issues上提出以供他人参考。

个人邮箱:[email protected]

如果有帮到您的话,麻烦顺手点个star~

更新日志

2024/05/08

  • 修复了获取聊天记录时滚动条不显示时的逻辑bug,见 #45 。感谢@T-K-233

2024/05/03

  • 修改了防自动下线功能的间隔时间,现在每一小时触发一次,不会影响自动发送功能的正常使用。

2024/04/29

  • 增加了防止微信长时间挂机掉线的功能,要开启该功能直接点击“防止自动下线(目前关闭)”按钮。

2024/04/16

  • 目前定时功能支持自定义年月日,具体请看输入提示。

2023/12/28

  • 增加了对微信多种语言模式的支持(简体中文,繁体中文以及英文)。@T-K-233

2023/11/21

  • 完善了README.md文件。
  • 调整了自动获取信息的代码,支持用户自定义自动回复的代码。 (参考 #33

2023/11/17

  • 修复了获取聊天记录代码的报错。

2023/08/01

  • 修复了无法at他人的bug。

2023/07/24

  • 现在程序在无法发送时会进行报错,不会直接闪退。
  • 现在用户可以通过按下"ctrl + alt"来终止发送。

2023/07/22

  • 现在代码调用方式支持存储聊天记录的图片和视频。

2023/07/19

  • 对输入方式进行了优化。
  • 现在支持加载内容txt文件。
  • 现在一条信息可以指定用户发送而不是默认全部发送。

2023/06/21

  • 现在ui界面支持读取微信联系人并存储成txt文件用于加载。

2023/06/20

  • 修复了当好友数过少无法获取联系人的bug。

2023/06/13

  • 修复版本更新导致代码调用无法发送信息的bug。

2022/11/22

  • 修正了文件版本更新混乱导致的出错问题。

2022/11/03

  • 现在可以一次性添加多个人名,输入时通过英文逗号‘,’分隔即可。

2022/09/26

  • 定时发送现在可以指定发送内容的范围(详情请使用最新版exe时看输入提示)。

2022/09/16

  • 新增获取窗口聊天记录的功能(仅支持代码调用)。

2022/07/27

  • 完成发送内容的优化,现在支持微信群@他人的操作

2022/07/07

  • 完成发送内容的优化,现在支持一次定时按顺序发送多条信息。

前言

之前使用过的itchat等工具都是基于web版网页微信的。自从网页微信无法登陆之后,之前的工具都失效了。因此,本人采用uiautomation对微信进行暴力操作,就有了本仓库。并且用自学了三年的图形界面水平写了个简易ui供大家使用。

注意:请确保输入相应内容时严格按照示例的内容格式进行,以保证代码的正确执行。

支持功能

图形界面方式:

  • 群发消息
  • 定时发送消息
  • 自动回复(参考 #33

注意事项:请在使用过程中严格遵守输入格式,否则程序会自动退出。(要去考虑一个个边界条件太麻烦了,我直接采取一个鸵鸟政策)。

代码调用方式:

  • 在指定群聊中@他人(若@所有人需具备@所有人权限)-> def at()

  • 搜索指定用户名的联系人发送信息 -> def send_msg()

  • 搜索指定用户名的联系人发送文件 -> def send_file()

  • 获取所有通讯录中所有联系人 -> def find_all_contacts()

  • 自动检测新消息 -> def check_new_msg()

  • 设置自动回复的联系人列表 -> def set_auto_reply()

  • 获取指定聊天窗口的聊天记录 -> def get_dialogs()

  • 获取指定聊天窗口的图片和视频 -> def save_dialog_pictures()

注意事项:请进入ui_auto_wechat.py文件内部进行调用。内部代码简易注释详尽,可以自由尝试。

文件说明

automation.py

可视化控件树的文件,针对希望DIY的用户,方便进行控件类型和深度的查看。

clipboard.py

提供了对文件的复制操作,调用函数即可将指定路径的文件复制到剪切板。

ui_auto_wechat.py

是对PC版微信进行的各种操作实现代码。内部代码简易,支持自由DIY。

wechat_locale.py

提供了对微信多种语言的支持,可以根据自己的需要进行选择。

wechat_gui.py

是编写的图形界面,在图形界面中调用对微信的操作。由于本人太懒,直接放弃美工,后期边做边改吧。

module.py

控件模块,组成UI界面的小组件。

wechat_gui.exe

是打包好的exe程序,可以直接下载进行使用。也可以对wechat_gui.py进行打包生成exe文件。

图形界面

GUI

		**图形界面示意图**

使用步骤

基础操作

  1. 点击“选择微信打开路径”,在目录下选择微信的可执行exe文件。

  2. 点击“添加用户”,输入要发送信息的用户名(在搜索框第一个展示的名字,如下所示)。

    搜索示例

  3. 点击文本框右侧的添加按钮,选择添加文本或文件。添加的内容会在发送时按添加的顺序一次发送。

  4. (可选)如果要进行定时发送,点击下方的“添加时间”按钮,按照规定的格式添加时间。随后点击“开始定时”,当时间达到列表中的指定时间时,便会将指定的消息发送给指定的用户。

微信群@他人

  1. 提前查看微信群里要@的人的名字

    @他人

  2. 在界面中添加文本内容,格式为“at: + 人名”(如果@所有人则不需要填写人名,注意冒号为英文符号)

    @他人添加

注意:@所有人时请确保拥有微信群@所有人的权限,否则将失败。目前不支持直接在@人名后发送内容,请先@人名,随后单独添加发送内容。

加载用户txt文件

用户可以提前查看所有要发送的对象的名字,并存储在一个txt文件中,之后点击”加载用户txt文件“按钮,即可自动加载所有对象。

用户txt文件格式如下:

加载用户txt

每一行都是一个对象的名字。

加载内容txt文件

你可以提前写下要发送的内容,并存储在一个txt文件中,之后点击”加载内容txt文件“按钮,即可自动加载所有内容。

注意事项:该方式仅支持发送文本内容

内容txt文件格式如下:

加载内容txt

每一行都是一条内容消息。在输入内容之前,你需要先指定该条消息要发送给哪些对象:

  • 如果默认发送给所有对象,则输入all:,然后写上要发送的内容
  • 如果要发送给指定的对象,则输入用户的编号,多个用户之间用英文逗号分隔(如1,2,3),然后写上要发送的内容

注意事项:指定对象与发送内容之间要用英文冒号进行分隔

友情赞助

如果你觉得这款应用不错的话,麻烦顺手点个star。也可以请作者喝杯奶茶,让我在日常生活中感受到一些小确幸~

微信收款码

支付宝收款码

easychat's People

Contributors

ltenjoy avatar nuthammer avatar t-k-233 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

easychat's Issues

有点疑惑

wechat_gui.py里面,“#获得用户编号列表” 这个for,在定时发送的时候,如果要发送的消息和用户编号不对(在“#判断是否需要发送给该用户”处)(例如消息发给2号,然后搜寻到1号了),这时候会跳出到raise,然后就不继续for循环了找下面的用户了,只能把raise改成continue,让目标用户不对的时候可以继续找下去直到正确的用户(好像一开始用还没问题,不知道啥情况)

群发一千多人发现的问题

群发多人功能(7.22的版本),发送的内容是“一段文字+一张图片”,运行过程中有下面几种异常的情况:1、没收到消息;2、只收到文字或图片;3、重复(2、3次)收到文字或/和图片

发消息期间我没碰过电脑,整天耗时还是比较长的,发了大半天吧(三个月前使用的,记不清细节了,今天突然想到上来提个issues……)

运行时闪退

选择wechat.exe的运行路径,编辑好消息,点击发送按钮时,会卡顿一会,然后闪退。

环境 Win10

当 set_auto_reply() 列表含有置顶聊天时,check_new_msg() 会重复发送回复消息

之前的 thread 请见 #33

问题复现:

使用 commit 588f9fc,运行这条示例代码,假设聊天界面有 [A, B, C] 三个聊天,设 auto_reply_names = [A],如果 A 位于当前聊天窗口的第一条,代码会重复发送回复消息

(更简单的复现方法是只设定 A 为置顶聊天)

这似乎是逻辑上的 bug,如果 auto_reply_names = [A],check_new_msg() 里面的 first_name 和 last_name 都会等于 A,这时双击聊天按键,第一条显示的还是 A,不论 A 是否有新消息,if item.Name in self.auto_reply_contacts 这条就都会被判中,发送回复消息。

一个临时的 workaround 是置顶一个不在 auto_reply_names 列表里的聊天窗口,这样双击聊天返回最上方时就能确保不会读到列表里面的项

求教

能否改成可以一口气添加多个用户的功能呀~
比如我输入 张三,李四,王五
直接就可以给
张三
李四
王五
而不需要我一个一个打进去……因为本地没有那些包……我不确定打包是否成功了

运行UI代码的时候貌似有问题

您好,我运行您的exe文件程序正常,但是我想在运行的时候加一个姓氏的前缀,于是我运行您的wechat_gui.py,按照同样的方法,发现发送按钮没有点击响应。
我猜测或许是win32clipboard版本问题,您能提供一下当前您的pywin32的版本号么?
以及,如果可能的话,可否维护一个requirement.txt呢?
万分感谢您的支持!

怎么知道微信客户端的界面结构

我想试着优化一些细节,比如,当前聊天窗口如果已经是我想要的窗口,就不再进行搜索
也想着试着开发一下获取微信群聊中群成员信息(比如名字)的功能
但苦于不清楚微信的界面结构,实现起来很困难

这个在mac上是不是不能用呢

执行的时候会报这个错:cannot import name 'COMError' from '_ctypes'
我查了一下 COMTypes 是为 Windows 而不是 Linux 设计的。

设置定时发送消息闪退

普通的发送消息没有问题。定时发送消息时,添加时间没有问题,点击【开始定时】会立即闪退
image
image
64 位操作系统, 基于 x64 的处理器,Windows 10 专业版

问题反馈

wechat_gui中

定时发送子线程类

class ClockThread(QThread):
def init(self):
super().init()
# 是否正在定时
self.time_counting = False
# 发送信息的函数
self.send_func = None
# 定时列表
self.clocks = None

def __del__(self):
    self.wait()

def run(self):
    while self.time_counting:
        localtime = time.localtime(time.time())
        hour = localtime.tm_hour % 24
        min = localtime.tm_min % 60

        for i in range(self.clocks.count()):
            **clock_hour, clock_min = self.clocks.item(i).text().split(" ")**//有误,三输入,应该为clock_hour, clock_min,content_times

            if int(clock_hour) == hour and int(clock_min) == min:
                self.send_func()

        time.sleep(60)

press_enter貌似会失灵

尝试用最新版3.9.5.73微信,调用到press_enter失败了。
一直timeout。
但是用你给的gui.exe是可以的。
是我哪里用错了嘛。

请教ui_auto_wechat.py里调用send_file()的问题

我尝试调用send_file()发送图片,发现剪切板是空的,无法发送空白消息
如果使用wechat_gui.exe操作是正常的
使用wechat_gui.py也会出现剪切板有图片,但发送的时候还没粘贴上因此无法发送空白消息的情况

[已解决]显示发送失败

系统是windows 10 微信版本 3.9.6.33
不管怎么测试都显示 发送失败!请检查内容格式或是否
有遗漏步骤!
是否不支持这个微信版本呢
20230901211254

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.