
Wechat Message Sender
Send WeChat messages programmatically for notifications or outreach.
Install
npx skills add https://github.com/cloudsen/eliteforge-skills --skill wechat-message-senderWhat is this skill?
- WeChat sending
- Programmatic messaging
- Notifications
Adoption & trust: 517 installs on skills.sh; 2/3 security scanners passed (skills.sh audits).
Recommended Skills
Agent Browservercel-labs/agent-browser
Lark Imlarksuite/cli
Lark Calendarlarksuite/cli
Lark Sheetslarksuite/cli
Lark Vclarksuite/cli
Lark Contactlarksuite/cli
Journey fit
Common Questions / FAQ
Is Wechat Message Sender safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Wechat Message Sender
interface: display_name: "微信消息发送器" short_description: "通过 macOS 微信桌面版向指定联系人安全发送文本消息。" default_prompt: "使用 $wechat-message-sender,给指定微信联系人发送一段文本;如果联系人未精确匹配就停止,不要误发。" #!/usr/bin/env swift import AppKit import ApplicationServices import Foundation typealias UIElement = AXUIElement struct Options { let contact: String let message: String let dryRun: Bool let timeout: TimeInterval } struct UIContext { let window: UIElement let mainSplit: UIElement let searchField: UIElement let sessionTable: UIElement let rightPane: UIElement } enum ScriptError: LocalizedError { case usage(String) case missingAccessibilityPermission case weChatNotInstalled case weChatLaunchFailed case chatWindowNotFound case uiStructureChanged(String) case contactNotFound(String) case openedWrongChat(expected: String, actual: String) case messageNotSent(String) var errorDescription: String? { switch self { case .usage(let text): return text case .missingAccessibilityPermission: return "缺少辅助功能权限,请在“系统设置 -> 隐私与安全性 -> 辅助功能”里放行当前终端或 Codex。" case .weChatNotInstalled: return "未找到微信桌面版。" case .weChatLaunchFailed: return "微信启动失败。" case .chatWindowNotFound: return "未找到微信聊天主窗口。" case .uiStructureChanged(let message): return "微信界面结构与脚本预期不一致:\(message)" case .contactNotFound(let contact): return "未在微信搜索结果中找到精确匹配联系人:\(contact)" case .openedWrongChat(let expected, let actual): return "打开的会话不是目标联系人,期望“\(expected)”,实际“\(actual)”。" case .messageNotSent(let detail): return "消息未成功发送:\(detail)" } } } func printUsage() { let text = """ 用法: swift scripts/send_wechat_message.swift --contact "<联系人>" --message "<消息>" [--dry-run] [--timeout 10] 参数: --contact 微信联系人显示名,必须精确匹配 --message 要发送的文本内容 --dry-run 只打开并校验会话,不发送消息 --timeout 超时时间,默认 10 秒 """ print(text) } func parseArguments() throws -> Options { let args = Array(CommandLine.arguments.dropFirst()) if args.isEmpty || args.contains("--help") || args.contains("-h") { throw ScriptError.usage("") } var contact: String? var message: String? var dryRun = false var timeout: TimeInterval = 10 var index = 0 while index < args.count { let arg = args[index] switch arg { case "--contact": index += 1 guard index < args.count else { throw ScriptError.usage("缺少 --contact 的值") } contact = args[index] case "--message": index += 1 guard index < args.count else { throw ScriptError.usage("缺少 --message 的值") } message = args[index] case "--timeout": index += 1 guard index < args.count, let value = Double(args[index]), value > 0 else { throw ScriptError.usage("--timeout 必须是正数") } timeout = value case "--dry-run": dryRun = true default: throw ScriptError.usage("未知参数:\(arg)") } index += 1 } guard let contact, !contact.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { throw ScriptError.usage("contact 不能为空") } guard let message, !message.isEmpty else { throw ScriptError.usage("message 不能为空") } return Options( contact: contact.trimmingCharacters(in: .whitespacesAndNewlines), message: message, dryRun: dryRun, timeout: timeout ) } func sleepBriefly(_ seconds: TimeInterval) { usleep(useconds_t(seconds * 1_000_000)) } func waitUntil<T>( timeout: TimeInterval, interval: TimeInterval = 0.2, _ condition: () -> T? ) -> T? { let deadline = Date().addingTimeInterval(timeout) while Date() <