因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据内容(提醒时间、提醒对象、提醒内容)设置定时任务——>给特定qq好友发送消息。

1. 软件版本:

2.安装依赖环境

pymysql安装:pip install pymysql

qqbot安装:pip install qqbot

3.数据库操作

数据库操作非常简单,跟Java类似,自己去菜鸟教程看一下基础语法就好了。

#coding: utf-8

import pymysql #导入pymysql模块

db = pymysql.connect("localhost","root","root","info_db" ) #数据库链接信息

cursor = db.cursor()

#插入任务

def insertSchedule(schedule):

insertsql = "insert into dutyschedule_tb(worktime,name) values(%s,%s)"

try:

#这种查询语句可以防止sql注入

cursor.execute(insertsql,(schedule['worktime'],schedule['name']))

db.commit()

except Exception:

db.rollback()

raise Exception

#删除任务

def deleteSchedule():

deletesql = ""

try:

cursor.execute(deletesql)

db.commit()

except Exception:

db.rollback()

def updateSchedule(user):

updatesql = ""

try:

cursor.execute(updatesql)

db.commit()

except Exception:

db.rollback()

#获取下一个任务

def findScheduleByNewTime():

selectsql = "SELECT * FROM dutyschedule_tb where NOW() <= date_format(worktime,'%Y-%m-%d %H:%i:%S') ORDER BY worktime ASC;"

try:

cursor.execute(selectsql)

results = cursor.fetchone()

schedule = {}

schedule['worktime'] = results[1]

schedule['name'] = results[2]

schedule['content'] = results[3]

return schedule

except Exception:

return None

4.配置qqbot登陆信息

也可以不配置,不配置的话就是每次扫码登陆,但这在Linux系统下不好用,我按说明将配置改成了每次将登陆二维码发到固定qq邮箱。qqbot模块在GitHub上,大家可以去看一下模块说明:qqbot

配置文件默认在用户目录下的.qqbot-tmp/v2.3.conf,linux下类似

{

# QQBot 的配置文件

# 使用 qqbot -u somebody 启动程序时,依次加载:

# 根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置

# 使用 qqbot 启动程序时,依次加载:

# 根配置 -> 默认配置 -> 命令行参数配置

"fantasy" : {

# 这是自己创建的用户自定义配置,可以在启动qqbot启动时选择加载哪个配置文件

# QQBot-term (HTTP-API) 服务器端口号(该服务器监听 IP 为 127.0.0.1 )

# 设置为 0 则不会开启本服务器(此时 qq 命令和 HTTP-API 接口都无法使用)。

"termServerPort" : 8188,

# 二维码 http 服务器 ip,请设置为公网 ip 或空字符串

"httpServerIP" : "",

# 二维码 http 服务器端口号

"httpServerPort" : 8189,

# 自动登录的 QQ 号

"qq" : "你的qq",

# 接收二维码图片的邮箱账号

"mailAccount" : "你的邮箱",

# 该邮箱的 IMAP/SMTP 服务授权码,一般在邮箱设置中有

"mailAuthCode" : "你的授权码",

# 是否以文本模式显示二维码

"cmdQrcode" : False,

# 显示/关闭调试信息

"debug" : False,

# QQBot 掉线后自动重启

"restartOnOffline" : True,

# 在后台运行 qqbot ( daemon 模式)

"daemon": False,

# 完成全部联系人列表获取之后才启动 QQBot

"startAfterFetch" : False,

# 插件目录

"pluginPath" : ".",

# 启动时需加载的插件

"plugins" : [],

# 插件的配置(由用户自定义)

"pluginsConf" : {},

},

# 用户 somebody 的配置,这是默认配置

"somebody" : {

#这里的基本内容跟上面一样,就不贴出来了,太长了占地方

},

# 可以在 默认配置 中配置所有用户都通用的设置

"默认配置" : {

"qq" : "",

"pluginPath" : "",

"plugins" : [

'qqbot.plugins.sampleslots',

'qqbot.plugins.schedrestart',

],

"pluginsConf" : {

'qqbot.plugins.schedrestart': '8:00',

}

},

# # 注意:根配置是固定的,用户无法修改(在本文件中修改根配置不会生效)

# "根配置" : {

# "termServerPort" : 8188,

# "httpServerIP" : "",

# "httpServerPort" : 8189,

# "qq" : "",

# "mailAccount" : "",

# "mailAuthCode" : "",

# "cmdQrcode" : False,

# "debug" : False,

# "restartOnOffline" : False,

# "daemon" : False,

# "startAfterFetch" : False,

# "pluginPath" : "",

# "plugins" : [],

# "pluginsConf" : {}

# },

}

5. 自定义功能

from qqbot import _bot as bot

#登陆qq,使用配置文件为fantasy

bot.Login(['-u','fantasy'])

#自定义函数,用来进一步封装qqbot接口

#获取所有好友列表

def getBuddyByName(nickname):

return bot.List('buddy',nickname)

#获取所有群列表

def getGroupByName(groupname):

return bot.List('group',groupname)

#给备注(没用备注就是昵称)为nickname的好友发送content消息

def sendToNickname(nickname,content):

user = getBuddyByName(nickname)

if user:

bot.SendTo(user[0],content)

else:

print("未找到联系人:"+nickname)

6.入口主程序

#coding: utf-8

import time

import sched

import datetime

from Dao.DutyscheduleDao import *

from Utils.QQInterface import *

#sched是python的定时任务模块

schedule = sched.scheduler(time.time, time.sleep)

#从数据库获取第一个任务

newschedule = findScheduleByNewTime()

#返回距下次任务还有多少秒

def getSeconds():

#申明全局变量

global newschedule

newschedule = findScheduleByNewTime()

if newschedule:

return (newschedule['worktime'] - datetime.datetime.now()).total_seconds()

else:

print("所有任务执行完毕,退出程序……")

exit()

#发消息函数

def SendTo():

global newschedule

sendToNickname(newschedule['name'],newschedule['content'])

#中间函数,用于循环运行所有数据库未执行事件

def perform():

SendTo()

#睡眠5秒,不然可能会重复发送消息

time.sleep(5)

sleepSecond = getSeconds()

print("下次任务执行时间:"+str(newschedule['worktime']))

#这次任务执行完后添加新任务

schedule.enter(sleepSecond,1,perform,())

def run():

#1.获取数据库最近将执行任务的时间及姓名

#2.计算执行任务的时间与现在时间的差值(单位:秒)

sleepSecond = getSeconds()

print("下次通知:"+str(newschedule['worktime']))

#3.加入定时处理函数

schedule.enter(sleepSecond,1,perform,())

#4.执行定时任务

schedule.run()

if __name__ == '__main__':

run()

7.其它

数据库结构:

drop database if exists info_db;

create database info_db default character set utf8;

use info_db;

create table dutyschedule_tb(

id int(11) auto_increment primary key,

worktime timestamp not null,

name varchar(10) not null,

content varchar(100) not null

)engine=InnoDB auto_increment=1 default charset=utf8;

以上就是循环发送qq消息的代码,以下是项目目录结构,其中一些没有出现的文件是自己测试所用,可以不用关心:

效果图:

总结:基本功能完成了,但是操作不够友好,需要手动往数据库录入数据,之后准备做一个数据管理的前端配合使用,可以简化很多操作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

qq自动发消息python脚本_python实现定时发送qq消息相关推荐

  1. 用python实现自动化办公------定时发送微信消息

    python自动化办公------定时发送微信消息 身边的一位朋友的真实事迹分享给大家,就暂称他C吧.C是一个英俊潇洒的健身男,经常沾花惹草,桃花运不断,听C说他的微信好友就有5000+,平时回消息都 ...

  2. 自动打卡python脚本_python实现腾讯文档自动打卡教程

    ​明明365天都不得不待在家里面,居然还要天天去腾讯文档打卡,烦死人了. 天天都填一样的内容,重复无意义的事情,时间就是金钱,浪费人时间约等于谋财害命呀. 所以参考了网络上的代码,并做了改进,用pyt ...

  3. dnf自动刷图python脚本_python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]...

    背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...

  4. 企业微信机器人脚本python_python实现企业微信定时发送文本消息的示例代码

    企业微信定时发送文本消息 使用工具:企业微信机器人+python可执行文件+计算机管理中的任务计划程序 第一步:创建群机器人 选择群聊,单击鼠标右键,添加群机器人. 建立群机器人后,右键查看机器人,如 ...

  5. python 钉钉机器人发送图片,python操作钉钉机器人发送各种消息

    python操作钉钉机器人发送各种消息 python操作钉钉机器人发送各种消息 使用python,操作钉钉群聊机器人发送消息 环境:python3.x 使用模块:requests,json 钉钉机器人 ...

  6. python qq自动发消息软件_Python之qq自动发消息的示例代码

    准备:pip install win32gui 可能遇到的麻烦: No module named 'win32gui' 的解决方法(踩坑之旅) 源码: import win32gui import w ...

  7. python测试开发教程 龙腾_龙腾源码网京东 有货自动下单,Python 脚本 你的口罩...

    本帖最后由 小朋友 于 2020-2-7 13:24 编辑 这个 githubcom/tychxn/jd-assistant 我写了个 Windows下的一键安装Python运行环境和安装依赖库的脚本 ...

  8. python脚本自动运行失败_Linux下Python脚本自启动和定时启动的详细步骤

    一.Python开机自动运行 假如Python自启动脚本为 auto.py .那么用root权限编辑以下文件: sudo vim /etc/rc.local 如果没有 rc.local 请看 这篇文章 ...

  9. 实现一个京东自动签到的python脚本

    下面是一个示例的京东自动签到的 Python 脚本: import requests import json# 首先你需要有京东账号并且登录 # 然后在浏览器中打开京东签到页面, 复制一下请求地址 u ...

  10. 全网最全的Windows下Anaconda2 / Anaconda3里Python语言实现定时发送微信消息给好友或群里(图文详解)...

    不多说,直接上干货! 缘由: (1)最近看到情侣零点送祝福,感觉还是很浪漫的事情,相信有很多人熬夜为了给爱的人送上零点祝福,但是有时等着等着就睡着了或者时间并不是卡的那么准就有点强迫症了,这是也许程序 ...

最新文章

  1. 新风系统风速推荐表_家用新风常用管道规格和对应风量推荐值
  2. 【ORACLE 高可用】ORACLE STREAM 基于用户的流复制配置 案例
  3. SpringMVC核心分发器DispatcherServlet分析[附带源码分析]
  4. 前端学习(1841):前端面试题之redux管理状态机制
  5. Date和Calendar
  6. 【VSCode - Vetur 插件报错】Cannot find module ‘XXX‘ or its corresponding type declarations.Vetur(2307)
  7. CF385C Bear and Prime Numbers 数学
  8. 在线预览(pptx、ppt、pps、docx、doc、xlsx、xls)
  9. 磁盘IOPS计算与测量
  10. Linux下的编辑器整理
  11. Web前端开发技术实验与实践(第3版)储久良编著实训3
  12. android投屏到web,网络视频投屏Web Video Cast v5.2.0 for Android 解锁高级版
  13. CHD的impala实现hive和hbase数据查询
  14. 如何把WORD文档中的其中一页转为横向,其它页不变,仍为纵向
  15. 让tableView的每个section的headerview随tableview一起滚动
  16. 交叉验证(s折、分层、留一法)
  17. 国乒28人出战匈牙利公开赛 新增混双项目受关注
  18. 计算机文化基础—计算机硬件系统
  19. 基于微信小程序的预约订座系统 开题报告
  20. oracle计算数据导出,oracle 数据导出

热门文章

  1. java 12进制转换_Java进制转换
  2. 学以致用二十四-----shell脚本中的列表及space
  3. Matlab基础(5)——符号运算
  4. Charles安装破解和基础配置
  5. 三十三个免费匿名临时邮箱服务
  6. 有替代CV520国产非接触式读写器读卡芯片CI520
  7. CISP可以自己报名考试吗?
  8. Visio连接线相关问题
  9. HTML5期末大作业:电影网站设计——电影动漫言叶之庭(4页) web前端课程设计_web前端课程设计代码,web课程设计-HTML网页制作代码
  10. 【gigabyte】开机循环进入技嘉主板界面、BIOS功能识别不出硬盘