Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/core/bots/graia/template.py
2021-07-22 01:58:33 +08:00

142 lines
5.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import traceback
import uuid
from os.path import abspath
import os
import aiohttp
import filetype as ft
from graia.application import MessageChain, GroupMessage, FriendMessage
from graia.application.friend import Friend
from graia.application.group import Group, Member
from graia.application.message.elements.internal import Plain, Image
from graia.broadcast.interrupt import InterruptControl
from graia.broadcast.interrupt.waiter import Waiter
from core.logger import Logger
from core.elements import Plain as BPlain, Image as BImage
from core.bots.graia.broadcast import app, bcc
from database_old import BotDB as database
class Template:
all_func = ("sendMessage", "waitConfirm", "asDisplay")
async def sendMessage(self, message: dict, msgchain, quote=True):
"""
用于发送一条消息兼容Group和Friend消息。
:param message: 函数传入的dict
:param msgchain: 消息链若传入str则自动创建一条带有Plain元素的消息链
:param quote: 是否引用传入dict中的消息仅对Group消息有效
:return: 被发送的消息链
"""
if isinstance(msgchain, str):
if msgchain == '':
msgchain = '发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。'
msgchain = MessageChain.create([Plain(msgchain)])
if isinstance(msgchain, list):
msgchain_list = []
for x in msgchain:
if isinstance(x, BPlain):
msgchain_list.append(Plain(x.text))
if isinstance(x, BImage):
msgchain_list.append(Image.fromLocalFile(x.image))
if not msgchain_list:
msgchain_list.append(Plain('发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。'))
msgchain = MessageChain.create(msgchain_list)
if Group in message:
send = await app.sendGroupMessage(message[Group], msgchain)
return send
if Friend in message:
send = await app.sendFriendMessage(message[Friend], msgchain)
return send
if 'From' in message:
if message['From'] == 'Group':
send = await app.sendGroupMessage(message['ID'], msgchain)
return send
if message['From'] == 'Friend':
send = await app.sendFriendMessage(message['ID'], msgchain)
return send
async def waitConfirm(self, message: dict):
"""
一次性模板用于等待触发对象确认兼容Group和Friend消息
:param message: 函数传入的dict
:return: 若对象发送confirm_command中的其一文本时返回True反之则返回False
"""
inc = InterruptControl(bcc)
confirm_command = ["", "", '确定', '是吧', '大概是',
'也许', '可能', '对的', '是呢', '对呢', '', '嗯呢',
'吼啊', '资瓷', '是呗', '也许吧', '对呗', '应该',
'yes', 'y', 'yeah', 'yep', 'ok', 'okay', '', '']
if Group in message:
@Waiter.create_using_function([GroupMessage])
def waiter(waiter_group: Group,
waiter_member: Member, waiter_message: MessageChain):
if all([
waiter_group.id == message[Group].id,
waiter_member.id == message[Member].id,
]):
if waiter_message.asDisplay() in confirm_command:
return True
else:
return False
if Friend in message:
@Waiter.create_using_function([FriendMessage])
def waiter(waiter_friend: Friend, waiter_message: MessageChain):
if all([
waiter_friend.id == message[Friend].id,
]):
if waiter_message.asDisplay() in confirm_command:
return True
else:
return False
return await inc.wait(waiter)
def asDisplay(self, message: dict):
if 'TEST' in message:
display = message['command']
else:
display = message[MessageChain].asDisplay()
return display
async def revokeMessage(self, msgchain):
"""
用于撤回消息。
:param msgchain: 需要撤回的已发送/接收的消息链
:return: 无返回
"""
try:
if isinstance(msgchain, list):
for msg in msgchain:
await app.revokeMessage(msg)
else:
await app.revokeMessage(msgchain)
except:
traceback.print_exc()
def checkPermission(self, message):
"""
检查对象是否拥有某项权限
:param message: 从函数传入的dict
:return: 若对象为群主、管理员或机器人超管则为True
"""
if Group in message:
if str(message[Member].permission) in ['MemberPerm.Administrator',
'MemberPerm.Owner'] or database.check_superuser(
message) or database.check_group_adminuser(message):
return True
if Friend in message:
if database.check_superuser(message[Friend].id):
return True
return False
""" async def Nudge(kwargs):
try:
if Group in kwargs:
await app.nudge(kwargs[Member])
if Friend in kwargs:
await app.nudge(kwargs[Friend])
except:
traceback.print_exc()"""