# PrivateChattingBot **Repository Path**: ecui/PrivateChattingBot ## Basic Information - **Project Name**: PrivateChattingBot - **Description**: 基于键鼠操作模拟的QQ群小窗群发机器人🤖I am an automated private chatting bot for QQ groups. - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: https://github.com/ErnestThePoet/PrivateChattingBot - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-25 - **Last Updated**: 2022-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 2022年11月担任2019级辅导员助理期间为核酸检测提醒而设计。 ## 使用方法 ### 准备数据 准备好`data/members.json`。`data/members.json`文件格式为`Array<{cardName:string;qqId:number;}>`,存储QQ群中所有成员的群名片和QQ号。 ### 设置点击坐标 程序通过模拟鼠标点击和键盘按键来工作,需要设置QQ群成员搜索框的点击坐标和QQ私聊消息输入框的点击坐标。 打开要群发的QQ群界面,建议将其最大化并收起群公告面板使群成员面板占领全部空间。点击窗口右上角最小化按钮左侧的下箭头,取消“合并会话窗口”的勾选。然后,点击群成员搜索按钮使搜索框出现。启动QQ自带的截图功能,从屏幕左上角开始截图,将光标拖动到群成员搜索框内,记下此时截图工具显示的截图像素尺寸X*Y(也即点击点屏幕坐标),将其填入程序设置中的“QQ群成员搜索框坐标”中。 然后打卡与任一群成员的聊天界面,以同样的方式确定聊天输入框内的点击坐标,填入程序设置中,点击确定。同时,借助此聊天窗口,点击发送按钮右侧的下拉菜单,选择按`Ctrl+Enter`键发送消息。 每次点击确定关闭设置对话框时,设置都会保存,因此下次打开程序时无需重新设置。 ### 测试运行 打开程序设置,勾选“仅粘贴消息而不发送”,点击确定。回到程序主界面后,**首先**在界面上方的输入框中输入要私聊发送的候选消息,每行一条,可以包含emoji表情(可以只输入一条,输入多条候选消息是为了防止大量群发相同消息导致QQ被封号)。然后在界面中部左侧输入框中输入所有要发起私聊的成员的群名片(完整的群名片或一部分),每行一个。之所以强调首先输入私聊消息,是因为在正式使用时,如果首先输入了私聊对象列表,在编辑私聊消息时可能会不小心按到`Caps Lock`键使程序意外启动。 然后打开QQ,打开要群发的QQ群界面,调整窗口到确定点击坐标时的状态(也要点击群成员搜索图标使群成员搜索框出现)。现在,按`Caps Lock`键即可启动程序。观察程序是否能够逐个打开私聊窗口,把候选私聊消息循环粘贴到消息输入框中,然后关闭私聊窗口,发起下一次私聊。程序运行过程中可以随时再次按下`Caps Lock`键停止程序运行,之后可以继续按`Caps Lock`键来重启程序,继续未完成的私聊。中途暂停程序运行时,程序会保证完成当前私聊的发送后再停止。 程序在每个操作之间都设置了一定时间间隔,确保在QQ界面稳定后再进行操作。如果程序预置的操作间隔过快使得程序无法正常进行私聊,请将程序设置中的“长操作间隔”设得更大一些。 ### 正式使用 测试运行成功后,打开程序设置,去掉“仅粘贴消息而不发送”的勾选,点击确定。然后按照测试运行的使用步骤进行使用即可。 ## 基本原理 按`Caps Lock`键启动程序后,程序首先读取界面中部左侧输入框每一行中的私聊目标姓名,在群成员数据库(`data/members.json`)中进行查找,如果有某一群成员的群名片中包含该目标姓名,则将其添加到私聊任务列表中。然后,程序以模拟键鼠操作的形式,循环执行每一个私聊任务。对于每一个私聊任务,程序会自动点击QQ群搜索框,在剪切板上设置当前私聊目标的QQ号,发送`Ctrl+V`按键事件将其粘贴进搜索框,随后按下`Enter`键打开私聊窗口,并在剪切板上设置当前的候选私聊消息。程序点击聚焦私聊窗口的消息输入框,发送`Ctrl+A`和`Ctrl+V`按键事件将私聊消息粘贴入消息输入框(由于消息输入框中可能保留着之前未发送的消息,按下`Ctrl+A`可确保在粘贴时已有消息被全选,可将已有消息覆盖)。然后程序发送`Ctrl+Enter`按键事件发送消息,之后发送`Alt+F4`按键事件关闭当前私聊窗口,进入下一次私聊。