【Python】基于wxauto的超简单微信机器人

编程入门 行业动态 更新时间:2024-10-09 00:48:25

【Python】基于wxauto的超简单微信<a href=https://www.elefans.com/category/jswz/34/1771107.html style=机器人"/>

【Python】基于wxauto的超简单微信机器人

前言

        我是一个python初学者,一直想做一个微信版类似qq的群助手,我尝试去百度过 "python微信机器人" 之类的搜索,但得到的结果几乎都是使用 "itchat","wxpy" 之类的库通过网页版微信去实现行为的,但腾讯在2019年7月份开始,彻底关闭了网页版微信登录入口,导致这类库几乎大部分的账号都无法使用了,而前几天我发现了 "wxauto" 这个库, 官方介绍为 “Windows版本微信客户端自动化,可实现简单的发送、接收微信消息,开发中”, 成功引起我的好奇心就点进去了学习学习

代码逻辑

        通过监听指定窗口最新消息 → 判定是否内置指令 → 若是则执行动作

代码基础模板

        这模板只是示范代码,想实现更多功能可以自行改造与添加

#导入所需的模块
from wxauto import WeChat
import time, keyboard#开启窗口函数
def openwx():#使用默认热键打开微信keyboard.press_and_release('ctrl+alt+w')#获取会话列表wx.GetSessionList#打开 who 的窗口wx.ChatWith(who)#初始化
#获取当前微信客户端
wx = WeChat()
#要打开的窗口名称(群名称)
who = '你的群聊'
#机器人的名字(可以不用)
wxbotname = '[群助手]' 
#开始循环
while True:#获取最新一条消息msg = wx.GetLastMessage#用if判定是否内置命令if msg == '/test':#检测到命令的行为wx.SendMsg(f'{wxbotname}Test ok~')#设置睡眠(可以不用)time.sleep(1)

本人现在使用的代码

        我自己添加了一些功能和一个游戏

from wxauto import WeChat, WxUtils
import random
import time
import keyboard
import requests
import os
import urllib
import json
import signal
import sys#输出台关闭机器人def signal_handler(sig, frame):print(f'\n[{nowtime}] 机器人关闭成功')while True:console = input()if console == 'exit':sys.exit()signal.signal(signal.SIGINT, signal_handler)# 热键开启微信def openwx():keyboard.press_and_release('ctrl+alt+w')wx.GetSessionListwx.ChatWith(who)# 获得香港天气def weather():Url = '.json'AppKey = '4r9bergjetiv1tsd'Value = {'key': AppKey, 'location': 'xianggang','language': 'zh-Hans', 'unit': 'c'}r = requests.get(Url, params=Value)data = r.json()['results'][0]['location']['name'], r.json()['results'][0]['now']['temperature'], r.json()['results'][0]['now']['text']hk_weather = ' '.join(data[:-1]) + '℃ ' + data[-1]wx.SendMsg(f'{wxbotname}{hk_weather}')# 发送多行文本def sendmsgs(text):WxUtils.SetClipboard(text)wx.SendClipboard()# AI回答模块class ai:def bot1():print(f'[{nowtime}]{msg[0]}:{msg[1][4:]}')msg_to_ai = msg[1][4:]url = f'.php?key=free&appid=0&msg={urllib.parse.quote(msg_to_ai)}'html = requests.get(url)text = html.json()["content"]text = text.replace('{br}', '\n')text = text.replace('\n提示:按分类看笑话请发送“笑话分类”','')print(f'[{nowtime}][菲菲]:{text}')msg_to_user = '[菲菲]' + textsendmsgs(msg_to_user)def bot2():print(f'[{nowtime}]{msg[0]}:{msg[1][4:]}')msg_to_ai = msg[1][4:]url = requests.get(f'=xiaosi&userid=user&spoken={urllib.parse.quote(msg_to_ai)}')answer = url.textanswer = json.loads(answer)text = answer['data']['info']['text']text = text.replace('{br}','\n')text = text.replace('\n提示:按分类看笑话请发送“笑话分类”','')print(f'[{nowtime}][小思]:{text}')msg_to_user = '[小思]' + textsendmsgs(msg_to_user)def bot3():print(f'[{nowtime}]{msg[0]}:{msg[1][4:]}')msg_to_ai = msg[1][4:]url = f'.php?msg={urllib.parse.quote(msg_to_ai)}'text = requests.get(url).textprint(f'[{nowtime}][小爱]:{text}')msg_to_user = '[小爱]' + textsendmsgs(msg_to_user)# 小游戏模块class games:def list():sendmsgs(f'{wxbotname}\n==游戏列表==\n#1. 猜数字\n#2. 1A2B\n==========\n/game <游戏编号>\n示范: /game #1')def game1():global game1_ingif game1_ing == True:wx.SendMsg(f'{wxbotname}正在与 @{player} 游玩猜数字小游戏中,请等待结束')else:game1_score = 0game1_win = Falseplayer = msg[0]game1_ing = Truegame1_answer = random.randint(1, 100)sendmsgs(f'{wxbotname}\n猜数字小游戏\n由我随机想一个1到100内的整数\n你来猜我想的数字\n我会给你猜大了还是猜小了的提示\n你只有七次机会,用光了机会还没猜到就输了哦\n(输入格式: ".整数")')while True:player_msg = wx.GetLastMessageif player_msg[0] == player and player_msg[1][:1] == '.':if player_msg[1][1:] == 'exit':wx.SendMsg(f'{wxbotname}已退出猜数字小游戏')game1_ing = Falsebreakgame1_score += 1if game1_score > 7:if game1_win == False:wx.SendMsg(f'{wxbotname} @{player} 你输了!,小辣鸡~')game1_ing = Falsebreakelse:player_input = player_msg[1][1:]try:player_input = int(player_input)except ValueError:wx.SendMsg(f'{wxbotname} 错误 : 不是合法的整数')game1_score -= 1if player_input < 1 or player_input > 100:wx.SendMsg(f'{wxbotname} 是1到100之内的整数哟~')game1_score -= 1elif player_input < game1_answer:wx.SendMsg(f'{wxbotname} 回合{game1_score} : 猜小了')elif player_input > game1_answer:wx.SendMsg(f'{wxbotname} 回合{game1_score} : 猜大了')else:wx.SendMsg(f'{wxbotname} 你猜中了,你赢了!,哼~我下次肯定赢你')game1_ing = Falsebreakif player_msg[1] in ['/time', '/weather', '/test', '/stop']:wx.SendMsg(f'{wxbotname}正在与 @{player} 游玩猜数字小游戏中,请等待结束再输入指令')def game2():wx.SendMsg('游戏暂未公测,敬请期待!')# 初始化
wx = WeChat()
who = '群名称'
openwx()
game1_ing = False
runtime = 0
wxbotname = '[群助手]'# 开始运行
print(f'[{time.strftime("%H:%M:%S", time.localtime(time.time()))}] 机器人开启成功\n')
while True:runtime += 1os.system(f'title 微信机器人(Runtime:{runtime}seconds)')if runtime % 60 == 0:wx.ChatWith(who)nowtime = time.strftime('%H:%M:%S', time.localtime(time.time()))if nowtime == '07:00:00':print(f'[{nowtime}]早上好')wx.SendMsg(f'{wxbotname}早上好')if nowtime == '13:00:00':print(f'[{nowtime}]下午好')wx.SendMsg(f'{wxbotname}下午好')if nowtime == '22:00:00':print(f'[{nowtime}]晚上好')wx.SendMsg(f'{wxbotname}晚上好')try:msg = wx.GetLastMessageexcept:passif msg[1] == '/test':print(f'[{nowtime}]检测到对应指令,将做出行动')wx.SendMsg(f'{wxbotname}test ok!')if msg[0] == '.' and msg[1] == '/stop':print(f'[{nowtime}]检测到对应指令,将做出行动')wx.SendMsg(f'{wxbotname}Now stopping...')print(f'[{nowtime}] 机器人关闭成功... ')input()exit()if msg[0] != '.' and msg[1] == '/stop':print(f'[{nowtime}]无权限的指令者')wx.SendMsg(f'{wxbotname}你没有权限使用"/stop"')if msg[1] == '/time':print(f'[{nowtime}]检测到对应指令,将做出行动')wx.SendMsg(f'{wxbotname}现在时间是{nowtime}')if msg[1] == '/weather':print(f'[{nowtime}]检测到对应指令,将做出行动')weather()# AIif msg[1][:4] == '/ai1':if msg[1][5:] == '':wx.SendMsg(f'{wxbotname}正确使用: /ai1 <消息>')else:print(f'[{nowtime}]检测到对应指令,将做出行动')ai.bot1()if msg[1][:4] == '/ai2':if msg[1][5:] == '':wx.SendMsg(f'{wxbotname}正确使用: /ai2 <消息>')else:print(f'[{nowtime}]检测到对应指令,将做出行动')ai.bot2()if msg[1][:4] == '/ai3':if msg[1][5:] == '':wx.SendMsg(f'{wxbotname}正确使用: /ai3 <消息>')else:print(f'[{nowtime}]检测到对应指令,将做出行动')ai.bot3()# 游戏if msg[1] == '/game':print(f'[{nowtime}]检测到对应指令,将做出行动')games.list()if msg[1] == '/game #1':print(f'[{nowtime}]检测到对应指令,将做出行动')games.game1()if msg[1] == '/game #2':print(f'[{nowtime}]检测到对应指令,将做出行动')games.game2()time.sleep(1)

总结

        如果你是一位略微精通python的人,就可以明显看出来我在这些代码中使用的其实都是一些十分基础的语法,总结来说wxauto是一个十分简单易明的模块,就连我这种初学者用起来都十分简单,所以你还在等什么,快去官网下载吧!(ps:使用pip会下载到3.3.5.3版本)

更多推荐

【Python】基于wxauto的超简单微信机器人

本文发布于:2024-02-06 09:52:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1747967.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:机器人   简单   Python   wxauto

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!