前言:
舔狗必备神器,全天24小时守护对象你值得拥有,hhh, (手动啪我)
技术结构:
本工具使用python语言,是一个可执行的桌面程序哦,使用python tkinter 作为GUI,python tkinter简单易学,你值得拥有,废话少说,下面贴你们最爱的源码,想要打包好的程序请私聊我
守护机器人使用说明:
1、remind_sentence文件夹下的文件为早上起床、午餐提示、晚餐提示、晚安提示的随机词列表,可以自行添加,但是文件编码必须是UTF-8
2、微信名称记住不是微信ID也不是备注,是对方的微信名
3、有四个时间段的问候,如果哪个时间段不需要可以不填
4、如果扫码登陆不了请使用可以登陆网页微信的微信号
python tkinter源码
def __init__(self):
# 初始化对象
root = Tk()
# 给主窗口设置标题内容
root.title("微信聊天机器人")
# 设置窗口大小
root.geometry('300x150')
# 设置窗口是否可变长、宽,True:可变,False:不可变
root.resizable(width=False, height=False)
# 登陆微信
self.login = Button(root, text="启动机器人", command=self.start_robot)
self.login.grid(row=30, column=1, sticky='N')
# 微信名称
self.wxnametext = Label(root, text="微信名称:").grid(row=0, column=0, sticky='W')
self.wxnameinput = Entry(root)
self.wxnameinput.grid(row=0, column=1, sticky='NW')
# 起床时间
self.morning_text = Label(root, text="早上问候时间:").grid(row=1, column=0, sticky='W')
self.morning_input = Entry(root, textvariable="", validate='focusout', width=5, validatecommand=self.check_morning, invalidcommand=self.check)
self.morning_input.grid(row=1, column=1, sticky='W')
# 午餐时间
self.lunch_text = Label(root, text="午餐问候时间:").grid(row=1, column=1, sticky='E')
self.lunch = Entry(root, textvariable="", validate='focusout', width=5, validatecommand=self.check_lunch, invalidcommand=self.check)
self.lunch.grid(row=1, column=3, sticky="W")
# 下班时间
self.closed_text = Label(root, text="下班问候时间:").grid(row=2, column=0, sticky='W')
self.closed = Entry(root, textvariable="", validate='focusout', width=5, validatecommand=self.check_closed, invalidcommand=self.check)
self.closed.grid(row=2, column=1, sticky='W')
# 晚餐时间
self.dinner_text = Label(root, text="晚餐问候时间:").grid(row=2, column=1, sticky='E')
self.dinner = Entry(root, textvariable="", validate='focusout', width=5, validatecommand=self.check_dinner, invalidcommand=self.check)
self.dinner.grid(row=2, column=3, sticky='W')
# 晚安问候
self.night_text = Label(root, text="晚安问候时间:").grid(row=3, column=0, sticky='W')
self.night = Entry(root, textvariable="", validate='focusout', width=5, validatecommand=self.check_night, invalidcommand=self.check)
self.night.grid(row=3, column=1, sticky='W')
# 进入消息循环
root.mainloop()
这里说明一下validatecommand和invalidcommand传的是校验函数,校验函数下面贴
```python
def check_morning(self):
'''判断是否是一个有效的日期字符串'''
morning = self.morning_input.get()
try:
time.strptime(morning, "%H:%M")
return True
except ValueError:
self.morning_input.delete(0, END)
return False
def check_lunch(self):
'''判断是否是一个有效的日期字符串'''
lunch = self.lunch.get()
try:
time.strptime(lunch, "%H:%M")
return True
except ValueError:
self.lunch.delete(0, END)
return False
def check_closed(self):
'''判断是否是一个有效的日期字符串'''
closed = self.closed.get()
try:
time.strptime(closed, "%H:%M")
return True
except ValueError:
self.closed.delete(0, END)
return False
def check_dinner(self):
'''判断是否是一个有效的日期字符串'''
dinner = self.dinner.get()
try:
time.strptime(dinner, "%H:%M")
return True
except ValueError:
self.dinner.delete(0, END)
return False
def check(self):
tkinter.messagebox.showinfo("提示", "请输入正确的日期,格式为24小时制")
return False
def check_night(self):
'''判断是否是一个有效的日期字符串'''
night = self.night.get()
try:
time.strptime(night, "%H:%M")
return True
except Exception:
self.night.delete(0, END)
return False
time.strptime校验时间,delete删除用户输入,tkinter.messagebox.showinfo弹窗提示
重点来了
# 在规定时间内进行关心她操作
def start_care(self):
morning = self.morning_input.get()
lunch = self.lunch.get()
closed = self.closed.get()
dinner = self.dinner.get()
night = self.night.get()
try:
# 待发送的内容,先置为空
message = ""
# 来个死循环,24小时关心她
while True:
# 提示
print("守护中,时间:%s" % time.ctime())
# 每天定时问候,早上起床,中午吃饭,晚上吃饭,晚上睡觉
# 获取时间,只获取时和分,对应的位置为倒数第13位到倒数第8位
now_time = time.ctime()[-13:-8]
if morning == "":
morning = '99:00'
if lunch == "":
lunch = '99:00'
if closed == "":
closed = '99:00'
if dinner == "":
dinner = '99:00'
if night == "":
night = '99:00'
if now_time == morning:
# 随机取一句问候语
message = choice(str_list_good_morning)
self.send_message(message)
print("提醒女友早上起床:%s" % time.ctime())
elif now_time == lunch:
message = choice(str_list_good_lunch)
self.send_message(message)
print("提醒女友中午吃饭:%s" % time.ctime())
elif now_time == closed:
message = choice(str_list_closing_time)
self.send_message(message)
print("提醒女友下班:%s" % time.ctime())
elif now_time == dinner:
message = choice(str_list_good_dinner)
self.send_message(message)
print("提醒女友晚上吃饭:%s" % time.ctime())
elif now_time == night:
message = choice(str_list_good_dream)
self.send_message(message)
print("提醒女友晚上睡觉:%s" % time.ctime())
time.sleep(60)
except Exception:
tkinter.messagebox.showerror("提示", "守护机器人异常,请重新启动")
后台线程守护
def start_robot(self):
try:
t1 = threading.Thread(target=self.start_care, args=())
t1.setDaemon(True)
t1.start()
except Exception:
tkinter.messagebox.showerror("提示", "守护机器人启动失败")
if __name__ == "__main__":
bot = Bot(cache_path=True)
setDaemon设置主线程结束子线程也结束运行,Bot微信登陆,cache_path设置记住登陆