mirror of https://github.com/zhongshmx/JX3BOT.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
5.3 KiB
169 lines
5.3 KiB
# -*- coding: utf-8 -*
|
|
|
|
"""
|
|
@Software : PyCharm
|
|
@File : common.py
|
|
@Author : 梦影
|
|
@Time : 2021/04/25 19:30:09
|
|
"""
|
|
|
|
from plugin.dict import serverList, flowerList, sectList, serendipityList
|
|
from aiocqhttp import ActionFailed, ApiNotAvailable
|
|
from plugin.database import MySql, MySqlInit
|
|
from aiocqhttp.message import Message
|
|
from aiohttp import ClientSession
|
|
|
|
from nonebot.log import logger
|
|
from nonebot import get_bot
|
|
import asyncio
|
|
import json
|
|
import time
|
|
|
|
bot = get_bot()
|
|
BOT = bot.config
|
|
|
|
|
|
class common:
|
|
@staticmethod
|
|
async def tencent(arg): # CQ:QQ # 公共模块
|
|
arg_as_msg = Message(arg)
|
|
return [s.data['qq'] for s in arg_as_msg if s.type == 'at']
|
|
|
|
@staticmethod
|
|
async def subtext(session): # 获取参数组
|
|
return session.current_arg_text.split()
|
|
|
|
@staticmethod
|
|
async def value(session): # 获取来源群号
|
|
return session.ctx['group_id']
|
|
|
|
@staticmethod
|
|
async def token(value): # 判断是否被授权
|
|
sql = 'SELECT * FROM `main` WHERE `Value` = %s'
|
|
data = await bot.client.query(sql, value)
|
|
if not data:
|
|
return "该群未被正式授权,请通过正常渠道购买使用!"
|
|
base = await common.next(data)
|
|
if base['Relet'] > int(time.time()):
|
|
result = False
|
|
else:
|
|
result = "该群已过期,请尽快续费恢复服务!"
|
|
return result
|
|
|
|
@staticmethod
|
|
async def next(data: list): # 下一条数据
|
|
for item in data:
|
|
return item
|
|
|
|
@staticmethod
|
|
async def table(Table, FieldName, FieldValue, Value): # 自定义查询数据库数据 # 公共模块
|
|
sql = f"SELECT * FROM `{Table}` WHERE `{FieldName}` = '{FieldValue}'"
|
|
data = await bot.client.query(sql)
|
|
if data:
|
|
data = await common.next(data)
|
|
return data[Value]
|
|
return None
|
|
|
|
|
|
# 网页访问
|
|
class submit:
|
|
@staticmethod
|
|
async def connect(url: str, data=None, headers=None, timeout=10): # POST
|
|
async with ClientSession() as session:
|
|
async with session.post(url=url, data=data, headers=headers, timeout=timeout) as data:
|
|
result = await data.text()
|
|
data.close()
|
|
return await submit.data(result)
|
|
|
|
@staticmethod
|
|
async def content(url: str, params=None, headers=None, timeout=10): # GET
|
|
async with ClientSession() as session:
|
|
async with session.get(url=url, params=params, headers=headers, timeout=timeout) as data:
|
|
result = await data.text()
|
|
data.close()
|
|
return await submit.data(result)
|
|
|
|
@staticmethod
|
|
async def sms(tencent: int): # 发送短信通知
|
|
data = {"phone": BOT.SMS_PHONE, "tencent": tencent}
|
|
result = await submit.connect(url=f"{bot.domain}/qcloud/app.php", data=data)
|
|
if not result['result']:
|
|
logger.info("发送短信成功!")
|
|
else:
|
|
logger.info("发送短信失败!")
|
|
bot.status[tencent] = 0
|
|
|
|
@staticmethod
|
|
async def data(text):
|
|
try:
|
|
result = json.loads(text)
|
|
except ValueError:
|
|
return text
|
|
return result
|
|
|
|
|
|
# 机器人操作
|
|
class robot:
|
|
@staticmethod
|
|
async def group_list(self_id: int): # 获取群列表
|
|
result = list()
|
|
try:
|
|
result = await bot.get_group_list(self_id=self_id)
|
|
if bot.status[self_id] == 0:
|
|
bot.status[self_id] = 1
|
|
except ApiNotAvailable:
|
|
logger.error(f"请求群信息'{self_id}'有问题惹!")
|
|
if bot.status[self_id] == 1:
|
|
asyncio.ensure_future(submit.sms(self_id)) # 发送短信
|
|
return result
|
|
|
|
@staticmethod
|
|
async def group_send(self_id: int, group_id, message): # 发送群消息
|
|
try:
|
|
await bot.send_group_msg(self_id=self_id, group_id=group_id, message=message)
|
|
except ActionFailed:
|
|
logger.error(f"发送群消息'{group_id}'有问题惹!")
|
|
|
|
@staticmethod
|
|
async def event(event, content): # 发送事件消息
|
|
try:
|
|
await bot.send(event, content)
|
|
except ActionFailed:
|
|
logger.error(f"发送群消息'{event['group_id']}有问题惹!")
|
|
|
|
@staticmethod
|
|
async def sender(session): # 发送人名称
|
|
if "sender" not in session.keys():
|
|
if not session.ctx['sender']['card']:
|
|
return session.ctx['sender']['nickname']
|
|
return session.ctx['sender']['card']
|
|
else:
|
|
if not session['sender']['card']:
|
|
return session['sender']['nickname']
|
|
return session['sender']['card']
|
|
|
|
|
|
class static:
|
|
@staticmethod
|
|
async def data(data, value): # 检索服务器,花价,心法,奇遇数据
|
|
if data == 0:
|
|
return value['Main']
|
|
m = {1: serverList, 2: flowerList, 3: sectList, 4: serendipityList}
|
|
result = None
|
|
for k, v in m[data].items():
|
|
if value in v:
|
|
result = k
|
|
return result
|
|
|
|
|
|
@bot.on_startup
|
|
async def init(): # 初始化
|
|
connect = MySql()
|
|
pool = await connect.initpool(BOT)
|
|
connect.pool = pool
|
|
setattr(bot, 'status', dict())
|
|
setattr(bot, 'client', connect)
|
|
setattr(bot, 'domain', BOT.DATA_DOMAIN)
|
|
for x in BOT.ROBOT_LIST:
|
|
bot.status[x] = 0
|
|
asyncio.ensure_future(MySqlInit(bot, serverList))
|
|
|