| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- # -*- coding: utf-8 -*-
- import time
- import json
- import sys
- import os
- sys.path.append(os.path.join(os.path.abspath(__file__).split('auto_message')[0] + 'auto_message'))
- from datetime import datetime
- from utils.utils_send_gotify import GotifyNotifier
- from utils.utils_send_serverchan import ServerChanNotifier
- from base.base_load_config import load_config, get_base_path
- config_json = load_config()
- base_project = get_base_path()
- DB_USER = config_json.get('DB_USER')
- DB_PASSWORD = config_json.get('DB_PASSWORD')
- DB_IP = config_json.get('DB_IP')
- DB_PORT = config_json.get('DB_PORT')
- MONGO_LINK = f'mongodb://{DB_USER}:{DB_PASSWORD}@{DB_IP}:{DB_PORT}/'
- from utils.utils_logs_handle import LogsHandle
- from pymongo import MongoClient
- class AutoRemind:
- def __init__(self):
- self.logs_handle = LogsHandle()
- self.now_day = time.strftime('%Y-%m-%d', time.localtime())
- self.db = 'ReMind'
- self.collection = 'remind'
- self.client = MongoClient(MONGO_LINK)
- def send_message(self, task_data):
- if task_data['retry'] > 0:
- # 如果无填时间, 则一直发送,如果有,则判断当前时间, 是否大于设置的时间, 大于则发送,返回 retry-1 的数据, 小于则不发送,返回 task_data 的数据
- if task_data['set_time']:
- if datetime.now() < datetime.strptime(task_data['set_time'], '%Y-%m-%d %H:%M:%S'):
- return None
- else:
- title = '消息提醒: {} - {}'.format('提醒消息', task_data['title'])
- context = '消息内容: {}\n'.format(task_data['context'])
- context += '设置时间: {}\n'.format(task_data['set_time'])
- context += '推送时间: {}\n'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
- # 组装完标题和正文, 准备发送消息
- # 推送到 message
- GotifyNotifier(title, context).send_message()
- # 推送到 serverchan
- ServerChanNotifier(title, context.replace('\n', '\n\n')).send_message()
- # 发送后 retry - 1
- task_data = {
- 'title': task_data['title'],
- 'context': task_data['context'],
- 'set_time': task_data['set_time'],
- 'retry': task_data['retry'] - 1
- }
- # 然后存回数据库
- self.write_config(task_data['title'])
- else:
- return None
- def load_config(self):
- db = self.client['ReMind']
- collection = db['remind']
- cursor = collection.find({})
- result = []
- # 遍历游标并打印每条数据
- for document in cursor:
- result.append({
- 'title': document['title'],
- 'context': document['context'],
- 'set_time': document['set_time'],
- 'retry': document['retry']
- })
- return result
- def write_config(self, task_title):
- db = self.client['ReMind']
- collection = db['remind']
- updated_document = collection.find_one_and_update(
- {"title": task_title}, # 查询条件
- {"$inc": {"retry": -1}}, # 更新操作,retry减1
- upsert=False, # 不插入新文档,如果未找到
- return_document=True # 返回更新前的文档
- )
- if updated_document:
- print("找到并更新了文档:", updated_document)
- else:
- print("未找到匹配的文档")
- def check_config(self):
- db_name = 'ReMind'
- if db_name not in self.client.list_database_names():
- self.db = self.client[db_name]
- else:
- self.db = self.client[db_name]
- collection_name = 'remind'
- if collection_name not in self.db.list_collection_names():
- self.collection = self.db[collection_name]
- else:
- self.collection = self.db[collection_name]
- default = {
- "title": "消息标题 1 title",
- "context": "消息内容 1 context",
- "set_time": "9999-12-31 10:00:00",
- "retry": 99
- }
- if not self.collection.find_one({"title": default["title"]}):
- self.collection.insert_one(default)
- def create_config(self):
- db = self.client['ReMind']
- collection = db['remind']
- create_list = [
- {"title": "消息标题 1 title", "context": "消息内容 1 context", "set_time": "9999-12-31 10:00:00",
- "retry": 99},
- ]
- for task in create_list:
- if not collection.find_one({"title": task["title"]}):
- collection.insert_one(task)
- def main(self):
- self.check_config()
- config_list = self.load_config()
- self.create_config()
- for task_data in config_list:
- result_task = self.send_message(task_data)
- if __name__ == '__main__':
- AutoRemind().main()
- print('消息发送完成,程序退出!')
|