async def move_in_tips(tips_id): sql_select = ('SELECT tips FROM ust WHERE id=?;') tip = sql_exe(sql_select, (tips_id, ))[0][0] sql_insert = ('INSERT INTO tips VALUES (NULL, ?)') sql_exe(sql_insert, (tip, ))
async def cancel(session: CommandSession): answer = session.get('answer') sql = ('DELETE FROM cmd WHERE Q=?;') sql_exe(sql, (answer, )) session.finish(f'已取消指令<{11}>')
def user_registration(ctx): user_id = ctx['sender']['user_id'] user_nickname = ctx['sender']['nickname'] user_card = ctx.get('sender').get('_card') if ctx.get('sender').get( '_card') else 'NULL' sql_insert = ('INSERT INTO user VALUES (' 'NULL, ?, ?, ?, ?, ?, ?, ?);') sql_args = (user_id, user_nickname, user_card, 0, 0, 0, '2019-01-01') sql_exe(sql_insert, sql_args)
async def already_exists(submit_tip): sql = ('SELECT tips FROM tips;') tips = sql_exe(sql) sql2 = ('SELECT tips FROM ust;') tips2 = sql_exe(sql2) if submit_tip in tips or submit_tip in tips2: return False else: return True
async def audit(tips_id, audit_bool): if audit_bool == '好': sql_update = ('UPDATE ust SET audit=1 WHERE id=?;') sql_exe(sql_update, (tips_id, )) return True else: sql_update = ('DELETE FROM ust WHERE id=?;') sql_exe(sql_update, (tips_id, )) return False
async def delete_ust(user_id, tips_id): if await cuprum(user_id, 1): sql_select = ('select ? from ust where id=? limit 1;') values = sql_exe(sql_select, (tips_id, tips_id)) if values: sql_delete = ('DELETE FROM ust WHERE user_id=? and id=?;') sql_exe(sql_delete, (user_id, tips_id)) return '删除成功' else: return '失败, id不存在' else: return '铜币不足'
async def _(): bot = nonebot.get_bot() sql_select = ( 'SELECT group_id, live_id FROM subscription WHERE platform = "jjwxc";') lis = sql_exe(sql_select) for i in lis: group_id = i[0] book_id = i[1] state, book_info = await get_book_info(book_id) if not book_cache.get(group_id): book_cache[group_id] = {} if not book_cache.get(group_id).get(book_id): book_cache.get(group_id)[book_id] = book_info[ 'chapter_id'] # id初始化 else: if book_info['chapter_id'] > book_cache.get(group_id).get(book_id): # id更新并大于缓存中的id title = book_info['title'] chapter_id = book_info['chapter_id'] chapter_title = book_info['chapter_title'] chapter_desc = book_info['chapter_desc'] book_cache.get(group_id)[book_id] = book_info['chapter_id'] msg = f'{title}更新了第{chapter_id}章:{chapter_title}-{chapter_desc}' print(msg) await bot.send_group_msg(group_id=group_id, message=msg) await asyncio.sleep(2)
async def _(): sql = ( 'SELECT group_id, deadline FROM deadline;' ) values = sql_exe(sql) now_date = timestamp2date_string(time.time()) for value in values: group_id = value[0] deadline = value[1] ny, nm, nd = map(int, now_date.split('-')) dy, dm, dd = map(int, deadline.split('-')) d1 = datetime.datetime(ny, nm, nd) d2 = datetime.datetime(dy, dm, dd) interval = d2 - d1 if interval.days < 0: bot = nonebot.get_bot() url = 'https://jinser.xyz/2020/02/22/%E5%85%B3%E4%BA%8E%E6%94%B6%E8%B4%B9%E5%92%8Ctoken/' await bot.send_group_msg(group_id=group_id, message=f'试用期已过, 如�延期请访问 {url} 查看详情') try: await bot.set_group_leave(group_id=group_id) except ActionFailed as e: bot.send_private_msg(user_id=2301583973, message=str(e))
def enable_group() -> Union[List[set], None]: sql_check = ('SELECT group_id FROM setting WHERE bool=?;') enable_group_list = sql_exe(sql_check, (0, )) if enable_group_list: return enable_group_list else: return
async def _(session: NoticeSession): ctx = session.ctx if ctx['sub_type'] == 'invite' and ctx['user_id'] == ctx['self_id']: await session.send('大家好') bot = session.bot ctx = session.ctx group_id = ctx['group_id'] sql = ( 'SELECT deadline FROM deadline WHERE group_id=?' ) deadline = sql_exe(sql, (group_id,)) now_date = timestamp2date_string(ctx['time']) if deadline: deadline = deadline[0][0] ny, nm, nd = map(int, now_date.split('-')) dy, dm, dd = map(int, deadline.split('-')) d1 = datetime.datetime(ny, nm, nd) d2 = datetime.datetime(dy, dm, dd) interval = d2 - d1 if interval.days < 0: await session.send('试用期已过, 将在五分钟后退群, @我说 token ,并输入相应的token可延长使用时间, 详情请查看: ' 'https://jinser.xyz/2020/02/22/%E5%85%B3%E4%BA%8E%E6%94%B6%E8%B4%B9%E5%92%8Ctoken/') await asyncio.sleep(300) # 退群 await bot.set_group_leave(group_id=group_id) else: sql_insert2 = ( 'INSERT OR IGNORE INTO deadline VALUES (NULL, ?, ?);' ) # +3天 add_date = datetime.timedelta(days=3) ny, nm, nd = map(int, now_date.split('-')) d1 = datetime.datetime(ny, nm, nd) deadline = d1 + add_date deadline = deadline.strftime("%Y-%m-%d") sql_exe(sql_insert2, (group_id, deadline)) else: await session.send('欢迎')
async def cuprum(user_id, num=None): try: sql_select = ('SELECT user_coin FROM user WHERE user_id=?;') values = sql_exe(sql_select, (user_id, ))[0][0] if values - num < 0: return False else: updated_num = values - num sql_update = ('UPDATE user SET user_coin=? WHERE user_id=?;') sql_exe(sql_update, (updated_num, user_id)) return num except IndexError: return '请先注册'
async def get_cuprum(user_id): try: sql_select = ('SELECT user_coin FROM user WHERE user_id=?;') coin = sql_exe(sql_select, (user_id, ))[0][0] return coin except IndexError: return
def user_registration_interval_judgment(user_id): sql_select = (f"select 1 from user where user_id = ? limit 1;") values = sql_exe(sql_select, (user_id, )) if values: return False else: return True
def check_in_interval_judgment(user_id): sql_select = (f'select * from user where user_id=?;') data = sql_exe(sql_select, (user_id, )) data = data[0] if data[7] == datetime.today().strftime('%Y-%m-%d'): return False else: return True
async def _(session: NLPSession): msg = session.ctx.get('message') msg = str(msg) ctx_group_id = session.ctx.get('group_id') pattern = re.compile(r'^添加问(.*)答(.*)$') # pattern_global = re.compile(r'^全局添加问(.*)答(.*)$') boo = pattern.match(str(msg)) # boo_global = pattern_global.match(str(msg)) if boo: if boo.group(1) and boo.group(2): cmd = 'add_cmd' elif boo.group(2): cmd = 'cancel' return IntentCommand(100, cmd, args={ 'answer': boo.group(2), 'group_id': ctx_group_id }) else: cmd = 'empty_finish' return IntentCommand(100, cmd, args={ 'question': boo.group(1), 'answer': boo.group(2), 'group_id': ctx_group_id }) # if boo_global: # user_id = session.ctx.get('sender').get('user_id') # if user_id == 2301583973 or user_id == 963949236: # if boo_global.group(1) and boo_global.group(2): # cmd = 'add_cmd' # else: # cmd = 'empty_finish' # return IntentCommand(100, cmd, # args={'question': boo_global.group(1), 'answer': boo_global.group(2), 'group_id': 1}) # else: # return IntentCommand(100, 'finish') sql = ('SELECT A, group_id FROM cmd WHERE Q=?;') cmd = sql_exe(sql, (msg, )) if cmd: print('-' * 20) cmd = cmd[0] answer = cmd[0] group_id = cmd[1] if group_id == ctx_group_id or group_id == 1: return IntentCommand(100, 'user_cmd', args={'answer': answer})
def verify(token): sql = ('SELECT duration FROM token WHERE token=?;') boo = sql_exe(sql, (token, )) # TODO 入群验证token # 1. 入群前验证 content # 2. 私聊回复token后向分享群 机器人主动加入 被邀请的全部拒绝 if boo: return boo else: return
def chick_in(user_id: int): data = get_chick_info(user_id) user_coin = data[4] user_favor = data[5] chick_in_days = data[6] up_user_coin = coin_algorithm(user_favor, user_coin) up_user_favor = favor_algorithm(chick_in_days, user_favor) up_chick_in_days = chick_in_days + 1 up_last_chick_in_time = datetime.today().strftime("%Y-%m-%d") sql_update = ('UPDATE user SET ' 'user_coin = ?,' f'user_favor = ?,' f'chick_in_days = ?,' f'last_chick_in_time = ? ' f'WHERE user_id = ?;') sql_args = (up_user_coin, up_user_favor, up_chick_in_days, up_last_chick_in_time, user_id) sql_exe(sql_update, sql_args)
async def audit_ust(): try: sql_select = ('select * from ust where audit=0 limit 1;') values = sql_exe(sql_select)[0] aud_id = values[0] values = 'id: ' + str(aud_id) + ' ' + values[4] + ' ' + values[5] return values, aud_id except IndexError: return '', None
async def card_choice(session: CommandSession): path = 'data/image' file_list = os.listdir(path) ch = random.choice(file_list) ch_id = ch.split('_')[0] sql = ('INSERT INTO draw VALUES (NULL, ?, ?, ?, ?);') ctx = session.ctx user_id = ctx['sender']['user_id'] user_nickname = ctx['sender']['nickname'] card = ctx.get('sender').get('_card') args = (user_id, user_nickname, card, ch_id) sql_exe(sql, args) # TODO 第一次抽卡时用 INSERT, 后续需要 UPDATE await session.send(ch)
async def get_ust_msg(user_id, nah=True): try: if nah: sql_select = ('SELECT * FROM ust WHERE user_id=? and audit=?;') data = sql_exe(sql_select, (user_id, 0)) else: sql_select = ('SELECT * FROM ust WHERE user_id=?;') data = sql_exe(sql_select, (user_id, )) data = [i for i in data] user_nickname = data[0][2] msg = ['id: ' + str(x[0]) + ' ' + x[4] + ' ' + x[5] for x in data] msg = [''.join(y) for y in msg] text = '\n'.join(msg) text = user_nickname + '\n' + text return text except IndexError: return '审核队列中无数据'
async def submit_ust(tips, user_id): if await cuprum(user_id, 20): try: sql_select = ('SELECT * FROM user WHERE user_id=?;') data = sql_exe(sql_select, (user_id, ))[0] user_nickname = data[2] user_card = data[3] sql_insert = ('INSERT INTO ust VALUES (NULL, ?, ?, ?, ?, ?, ?)') params = (user_id, user_nickname, user_card, tips, datetime.today().strftime("%Y-%m-%d"), 0) sql_exe(sql_insert, params) except IndexError: return '提交失败, 请先注册(输入"注册")' return '提交成功, 审核中' else: return '铜币不足'
async def modify_ust(tips, user_id, tips_id): if await cuprum(user_id, 5): try: sql_select = ('SELECT * FROM ust WHERE user_id=?') user_id_for_verify = sql_exe(sql_select, (user_id, )) user_id_for_verify = [i[0] for i in user_id_for_verify] if int(tips_id) in user_id_for_verify: sql_select2 = ('SELECT * FROM ust WHERE id=?') values = sql_exe(sql_select2, (tips_id, ))[0] before = values[4] sql_update = ('UPDATE ust SET tips=? WHERE id = ?;') sql_exe(sql_update, (tips, tips_id)) return f'修改成功, {before} -> {tips}' else: return '请检查id是否正确' except sqlite3.OperationalError: return '当前没有审核中的tips' else: return '铜币不足'
async def _(): bot = nonebot.get_bot() sql_select = ( 'SELECT group_id, live_id, platform FROM subscription;' ) lis = sql_exe(sql_select) for i in lis: group_id = i[0] live_id = i[1] platform = i[2] state, live_dict = await get_bili_live(live_id) if not live_cache.get(group_id): live_cache[group_id] = [] # 如果直播间在直播且不在直播缓存列表中 if state == 1 and live_id not in live_cache.get(group_id): live_cache.get(group_id).append(live_id) # 加入直播缓存列表 # 格式化msg 并发送 title = live_dict['title'] img = live_dict['img'] uname = live_dict['uname'] msg = f'{title}\n{uname} 开播了\n{platform} | https://live.bilibili.com/{live_id}' boo = await bot.can_send_image() boo = boo['yes'] if boo: msg = f'[CQ:image,file={img}]' + msg else: msg = img + '\n' + msg await bot.send_group_msg(group_id=group_id, message=msg) # 如果不在直播 elif state == 0: try: # 尝试从直播缓存列表中删除该直播间 live_cache.get(group_id).remove(live_id) except (ValueError, AttributeError): pass await asyncio.sleep(2)
def get_chick_info(user_id: int): sql_select = (f'select * from user where user_id=?;') data = sql_exe(sql_select, (user_id, )) return data[0]
from sqlite3 import OperationalError # import datetime # # import asyncio # from random import randint try: sql1 = ( 'CREATE TABLE token(' 'id INTEGER PRIMARY KEY AUTOINCREMENT,' 'token TEXT NOT NULL,' 'duration INT NOT NULL' ');' ) sql_exe(sql1) except OperationalError: pass try: sql2 = ( 'CREATE TABLE deadline(' 'id INTEGER PRIMARY KEY AUTOINCREMENT,' 'group_id INT NOT NULL,' 'deadline TEXT NOT NULL' ');' ) sql_exe(sql2) except OperationalError: pass
async def process(self): """ 合并处理图片 创建文字框架 写入文字信息 嵌入图标框架 :return: 处理后的图片 """ w = 640 size = self._small_size # 创建白色画布 target = Image.new('RGBA', (640, 640), (0, 0, 0, 0)) # 贴上高斯模糊后的图片 target.paste(await self.gaussian_blur()) # 创建小图标的框架 framework = Image.open('./data/framework.png').convert('L') framework = framework.resize((size + 30, size + 30)) target_l = Image.new('RGBA', (size + 30, size + 30), (0, 0, 0, 0)) target_l.putalpha(framework) # 贴上小图标的框架 target.paste(target_l, (w // 2 - size // 2 - 15, w // 2 - size // 2 - 50 - 15), target_l) # 在原图中间 y-50 的位置贴上小图标 target.paste(await self.alpha_circle(), (w // 2 - size // 2, w // 2 - size // 2 - 50), await self.alpha_circle()) # 创建文字框架 txt_frame = Image.new('RGBA', (540, 160), (0, 0, 0, 190)) # 贴上文字框架 target.paste(txt_frame, (50, 425), txt_frame) # 指定文字, 文字的字体和位置 txt = self._txt.split('\n') font = ImageFont.truetype('./data/REEJI-HonghuangLiGB-SemiBold-2.ttf', 24) pix = (255, 255, 255) count = 0 for i in txt: text_size = font.getsize(i) where = ((self._image.size[0] - text_size[0]) / 2, (self._image.size[1] - text_size[1]) / 2 + 125 + 30 * count) # 写入文字 draw = ImageDraw.Draw(target) draw.text(where, i, pix, font=font) count += 1 sql_select = ( 'SELECT tips FROM tips WHERE LENGTH(tips) <= 15 ORDER BY RANDOM() limit 1;' ) values = sql_exe(sql_select) values = str(values[0][0]) # 写入tips draw = ImageDraw.Draw(target) font = ImageFont.truetype('./data/REEJI-HonghuangLiGB-SemiBold-2.ttf', 18) writer_size = font.getsize(values) pix = (230, 230, 230) draw.text(((self._image.size[0] - writer_size[0]) / 2, 585 - 26), values.replace('\n', ''), pix, font=font) return target
async def get_ust(user_id, tips_id): sql_select = ('SELECT * FROM ust WHERE id=? and user_id=?') values = sql_exe(sql_select, (tips_id, user_id))[0] return values[4]
from sql_exe import * from sqlite3 import OperationalError import re sql_create = ('CREATE TABLE cmd(' 'id INTEGER PRIMARY KEY AUTOINCREMENT,' 'user_id INT NOT NULL,' 'user_nickname TEXT NOT NULL,' 'user_card TEXT,' 'group_id INT,' 'Q TEXT NOT NULL,' 'A TEXT NOT NULL' ');') try: sql_exe(sql_create) except OperationalError: pass @on_command('add_cmd') async def add_cmd(session: CommandSession): question = session.get('question') answer = session.get('answer') group_id = session.get('group_id') sender = session.ctx['sender'] user_id = sender['user_id'] user_nickname = sender['nickname'] user_card = sender.get('user_card')
async def add_cmd(session: CommandSession): question = session.get('question') answer = session.get('answer') group_id = session.get('group_id') sender = session.ctx['sender'] user_id = sender['user_id'] user_nickname = sender['nickname'] user_card = sender.get('user_card') # **暂时停用** base_cmd = [ 'yyy', '嘤一下', '嘤一个', '来嘤', 'kusa', '草', 'robot', '机屑人', 'string', '五十弦', 'mua', 'mua~', 'zaima', 'nihao', 'wei,zaima', 'wei,zaima', 'nihao', '你好', '泥嚎', 'help', '怎么用', '怎么玩', '签到', '注册' ] name_list = ['五十弦', '弦', 'hello', 'Hello', 'hi', 'Hi'] if question in base_cmd: session.finish('与内置指令冲突🔧') elif question in name_list: session.finish(f'{question}不能作为指令,但是可以用{question}来叫我') sql_select = ('SELECT Q FROM cmd WHERE group_id=?;') q_list = sql_exe(sql_select, (group_id, )) if q_list: if (question, ) in q_list: sql_select_question = ( 'SELECT A FROM cmd WHERE Q=? AND group_id=?;') b_answer = sql_exe(sql_select_question, (question, group_id))[0] # msg = session.ctx.get('message') # msg = str(msg) # if b_group_id == 1 and msg[:2] == '全局': # user_id = session.ctx.get('sender').get('user_id') # if user_id == 2301583973 or user_id == 963949236: # sql_rewrite = ( # 'UPDATE cmd SET A=? WHERE Q=?;' # ) # sql_exe(sql_rewrite, (answer, question)) # # session.finish(f'已覆盖原全局指令回答<{b_answer}>\n当前指令:\n<Q>{question}</Q>\n<A>{answer}</A>') # else: # session.finish('与全局指令冲突') # elif b_group_id == 1: # user_id = session.ctx.get('sender').get('user_id') # if not user_id == 2301583973 or not user_id == 963949236: # session.finish('与全局指令冲突') sql_rewrite = ('UPDATE cmd SET A=? WHERE Q=? AND group_id=?;') sql_exe(sql_rewrite, (answer, question, group_id)) session.finish( f'已覆盖原指令回答<{b_answer[0]}>\n当前指令:\n<Q>{question}</Q>\n<A>{answer}</A>' ) sql_insert = ('INSERT INTO cmd VALUES (NULL, ?, ?, ?, ?, ?, ?);') sql_exe(sql_insert, (user_id, user_nickname, user_card, group_id, question, answer)) # if group_id == 1: # await session.send(f'⬈全局添加成功➾\n<Q>{question}</Q>\n<A>{answer}</A>') # else: await session.send(f'⬈添加成功➾\n<Q>{question}</Q>\n<A>{answer}</A>')
from nonebot import CommandGroup, CommandSession from sql_exe import * from sqlite3 import OperationalError import os import random try: sql_init = ('CREATE TABLE draw(' 'id INTEGER PRIMARY KEY AUTOINCREMENT,' 'user_id INT NOT NULL,' 'user_nickname TEXT NOT NULL,' 'user_card TEXT,' 'cards TEXT' ');') sql_exe(sql_init) except OperationalError: pass __plugin_name__ = '抽卡' __plugin_usage__ = """借用塔罗, 图一乐 指令: 单抽 / 十连 / 仓库""" cg = CommandGroup('_card', only_to_me=False) @cg.command('choice', aliases=['单抽']) async def card_choice(session: CommandSession): path = 'data/image' file_list = os.listdir(path)