All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.simbot.component.mirai.messages.MiraiSpecialEvents.kt Maven / Gradle / Ivy

There is a newer version: 1.11.0-1.17-Final
Show newest version
/*
 *
 * Copyright (c) 2020. ForteScarlet All rights reserved.
 * Project  component-mirai
 * File     MiraiSpecialEvents.kt
 *
 * You can contact the author through the following channels:
 *  github https://github.com/ForteScarlet
 *  gitee  https://gitee.com/ForteScarlet
 *  email  [email protected]
 *  QQ     1149159218
 *  The Mirai code is copyrighted by mamoe-mirai
 *  you can see mirai at https://github.com/mamoe/mirai
 *
 *
 */

package com.simbot.component.mirai.messages

import com.forte.qqrobot.beans.messages.NicknameAble
import com.forte.qqrobot.beans.messages.QQCodeAble
import com.forte.qqrobot.beans.messages.msgget.MsgGet
import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.event.events.*

/*
    此文件中定义一些只有mirai中才有的特殊事件接口。
 */

/**
 * mirai中特有的bot相关事件
 */
interface MiraiSpecialBotMsgGet: MsgGet, QQCodeAble, NicknameAble {
    /** 可以得到mirai中的原生Bot对象 */
    val bot: Bot
    /** 可以得到mirai中当前事件的原生对象 */
    val event: T

    @JvmDefault override fun getNickname(): String = bot.nick
    @JvmDefault override fun getOriginalData(): String = event.toString()
    @JvmDefault override fun getThisCode(): String = bot.id.toString()
    @JvmDefault override fun getQQCode(): String = thisCode
    @JvmDefault override fun getCodeNumber(): Long = bot.id
    @JvmDefault override fun getQQHeadUrl(): String = "http://q1.qlogo.cn/g?b=qq&nk=$thisCode&s=640"
}

/**
 * 针对于[MiraiSpecialBotMsgGet]的抽象类
 */
abstract class BaseMiraiSpecialBotMsgGet(override val event: T): MiraiSpecialBotMsgGet {
    private val eventTime = System.currentTimeMillis()

    override val bot: Bot
        get() = event.bot

    private var eventMsg: String? = null

    override fun getMsg(): String? = eventMsg
    override fun setMsg(newMsg: String?) {
        eventMsg = newMsg
    }

    @Deprecated("can not reset bot code in MiraiBotOfflineEvent")
    override fun setThisCode(code: String?) { }

    /** 事件id。默认情况下此id不保证唯一性  */
    override fun getId(): String = "$bot.$event"


    /** 获取消息的字体  */
    override fun getFont(): String? = null

    /** 获取到的时间, 代表某一时间的秒值。一般情况下是秒值。如果类型不对请自行转化  */
    override fun getTime(): Long = eventTime
}


/**
 * [Bot] 登录完成, 好友列表, 群组列表初始化完成
 * 不过一般来讲,登录与注册监听的分离的,所以此事件几乎不可能被触发
 * 因此暂时不做整合
 * @see BotOnlineEvent
 */
interface BotOnline: MiraiSpecialBotMsgGet


/**
 * [Bot] 离线.
 * @see BotOfflineEvent
 */
interface BotOffline: MiraiSpecialBotMsgGet {
    /** 离线类型,分为主动离线与被动离线。 */
    val offlineType: BotOfflineType
    /** 如果为主动离线,此处则**可能**有值。也可能是null。 */
    val cause: Throwable?
    /** 如果为被动离线,则此处不为null。否则为null。 */
    val forceMessage: ForceMessage?
}

/**
 * [Bot] 离线类型
 */
enum class BotOfflineType {
    /**
     * 主动下线。
     * @see BotOfflineEvent.Active
     */
    INITIATIVE,

    /**
     * 被动下线。
     * @see BotOfflineEvent.Force
     */
    PASSIVE,


    /**
     * 因网络原因掉线
     * @see BotOfflineEvent.Dropped
     */
    DROPPED,

    /**
     * 其他可能的未知类型和不稳定/实验性类型
     * @see BotOfflineEvent 及其子类
     */
    OTHER
}

/**
 * 当离线类型为[BotOfflineEvent.Force] ( [BotOfflineType.PASSIVE] ) 被动的时候,
 * 此类封装[BotOfflineEvent.Force.title] [BotOfflineEvent.Force.message]
 */
data class ForceMessage(val title: String, val message: String)



/**
 * [Bot] 主动或被动重新登录. 在此事件广播前就已经登录完毕.
 * [net.mamoe.mirai.event.events.BotReloginEvent]
 */
interface BotRelogin: MiraiSpecialBotMsgGet {
    /**
     * @see BotReloginEvent.cause
     */
    val cause: Throwable?
}











/**
 * [Bot] 头像被修改(通过其他客户端修改了头像). 在此事件广播前就已经修改完毕.
 * [net.mamoe.mirai.event.events.BotAvatarChangedEvent]
 */
interface BotAvatarChanged: MiraiSpecialBotMsgGet


/**
 * 图片上传前. 可以阻止上传.
 *
 * 此事件总是在 [ImageUploadEvent] 之前广播.
 * 若此事件被取消, [ImageUploadEvent] 不会广播.
 *
 * @see Contact.uploadImage 上传图片. 为广播这个事件的唯一途径
 * @see net.mamoe.mirai.event.events.BeforeImageUploadEvent
 */
interface BeforeImageUpload: MiraiSpecialBotMsgGet


/**
 * @see net.mamoe.mirai.event.events.ImageUploadEvent
 */
interface ImageUpload: MiraiSpecialBotMsgGet


/**
 * [net.mamoe.mirai.event.events.MessagePreSendEvent]
 */
interface MessagePreSend: MiraiSpecialBotMsgGet

/**
 * [net.mamoe.mirai.event.events.MessagePostSendEvent]
 */
interface MessagePostSend: MiraiSpecialBotMsgGet>


/*

/**
 * 群 "匿名聊天" 功能状态改变. 此事件广播前修改就已经完成.
 */
data class GroupAllowAnonymousChatEvent internal constructor(


/**
 * 群 "坦白说" 功能状态改变. 此事件广播前修改就已经完成.
 */
data class GroupAllowConfessTalkEvent internal constructor(

/**
 * 群 "允许群员邀请好友加群" 功能状态改变. 此事件广播前修改就已经完成.
 */
data class GroupAllowMemberInviteEvent internal constructor(
 */




© 2015 - 2024 Weber Informatics LLC | Privacy Policy