Commit 348d13a4 authored by Him188's avatar Him188

Handle event of new member joining

parent 3b0ee9ad
...@@ -325,6 +325,15 @@ internal class GroupImpl( ...@@ -325,6 +325,15 @@ internal class GroupImpl(
@UseExperimental(MiraiExperimentalAPI::class) @UseExperimental(MiraiExperimentalAPI::class)
override lateinit var botPermission: MemberPermission override lateinit var botPermission: MemberPermission
var _botMuteRemaining: Int = groupInfo.botMuteRemaining
override val botMuteRemaining: Int =
if (_botMuteRemaining == 0 || _botMuteRemaining == 0xFFFFFFFF.toInt()) {
0
} else {
_botMuteRemaining - currentTimeSeconds.toInt() - bot.client.timeDifference.toInt()
}
override val members: ContactList<Member> = ContactList(members.mapNotNull { override val members: ContactList<Member> = ContactList(members.mapNotNull {
if (it.uin == bot.uin) { if (it.uin == bot.uin) {
botPermission = it.permission botPermission = it.permission
...@@ -487,6 +496,7 @@ internal class GroupImpl( ...@@ -487,6 +496,7 @@ internal class GroupImpl(
} }
override suspend fun sendMessage(message: MessageChain) { override suspend fun sendMessage(message: MessageChain) {
check(!isBotMuted) { "bot is muted. Remaining seconds=$botMuteRemaining" }
val event = GroupMessageSendEvent(this, message).broadcast() val event = GroupMessageSendEvent(this, message).broadcast()
if (event.isCancelled) { if (event.isCancelled) {
throw EventCancelledException("cancelled by FriendMessageSendEvent") throw EventCancelledException("cancelled by FriendMessageSendEvent")
......
...@@ -44,6 +44,7 @@ internal inline class GroupInfoImpl( ...@@ -44,6 +44,7 @@ internal inline class GroupInfoImpl(
override val autoApprove get() = delegate.groupFlagext3?.and(0x00100000) == 0 override val autoApprove get() = delegate.groupFlagext3?.and(0x00100000) == 0
override val confessTalk get() = delegate.groupFlagext3?.and(0x00002000) == 0 override val confessTalk get() = delegate.groupFlagext3?.and(0x00002000) == 0
override val muteAll: Boolean get() = delegate.shutupTimestamp != 0 override val muteAll: Boolean get() = delegate.shutupTimestamp != 0
override val botMuteRemaining: Int get() = delegate.shutupTimestampMe ?: 0
} }
internal class TroopManagement { internal class TroopManagement {
......
...@@ -187,6 +187,9 @@ internal class OnlinePush { ...@@ -187,6 +187,9 @@ internal class OnlinePush {
) )
} }
} else { } else {
if (target == bot.uin) {
}
val member = group[target] val member = group[target]
if (time == 0) { if (time == 0) {
MemberUnmuteEvent(operator = operator, member = member) MemberUnmuteEvent(operator = operator, member = member)
......
...@@ -14,6 +14,7 @@ package net.mamoe.mirai.contact ...@@ -14,6 +14,7 @@ package net.mamoe.mirai.contact
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.event.events.BeforeImageUploadEvent import net.mamoe.mirai.event.events.BeforeImageUploadEvent
import net.mamoe.mirai.event.events.EventCancelledException
import net.mamoe.mirai.event.events.ImageUploadEvent import net.mamoe.mirai.event.events.ImageUploadEvent
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
...@@ -47,16 +48,20 @@ interface Contact : CoroutineScope { ...@@ -47,16 +48,20 @@ interface Contact : CoroutineScope {
* *
* @see FriendMessageSendEvent 发送好友信息事件, cancellable * @see FriendMessageSendEvent 发送好友信息事件, cancellable
* @see GroupMessageSendEvent 发送群消息事件. cancellable * @see GroupMessageSendEvent 发送群消息事件. cancellable
*
* @throws EventCancelledException 当发送消息事件被取消
* @throws IllegalStateException 发送群消息时若 [Bot] 被禁言抛出
*/ */
suspend fun sendMessage(message: MessageChain) suspend fun sendMessage(message: MessageChain)
/** /**
* 上传一个图片以备发送. * 上传一个图片以备发送.
* TODO: 群图片与好友图片之间是否通用还不确定. * TODO 群图片与好友图片在服务器上是通用的, 在 mirai 目前不通用.
* TODO: 好友之间图片是否通用还不确定.
* *
* @see BeforeImageUploadEvent 图片发送前事件, cancellable * @see BeforeImageUploadEvent 图片发送前事件, cancellable
* @see ImageUploadEvent 图片发送完成事件 * @see ImageUploadEvent 图片发送完成事件
*
* @throws EventCancelledException 当发送消息事件被取消
*/ */
suspend fun uploadImage(image: ExternalImage): Image suspend fun uploadImage(image: ExternalImage): Image
......
...@@ -24,18 +24,20 @@ interface Group : Contact, CoroutineScope { ...@@ -24,18 +24,20 @@ interface Group : Contact, CoroutineScope {
/** /**
* 群名称. * 群名称.
* *
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException] * 在修改时将会异步上传至服务器.
* 频繁修改可能会被服务器拒绝. * 频繁修改可能会被服务器拒绝.
* *
* @see MemberPermissionChangeEvent * @see MemberPermissionChangeEvent
* @throws PermissionDeniedException 无权限修改时将会抛出异常
*/ */
var name: String var name: String
/** /**
* 入群公告, 没有时为空字符串. * 入群公告, 没有时为空字符串.
* *
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException] * 在修改时将会异步上传至服务器.
* *
* @see GroupEntranceAnnouncementChangeEvent * @see GroupEntranceAnnouncementChangeEvent
* @throws PermissionDeniedException 无权限修改时将会抛出异常
*/ */
var entranceAnnouncement: String var entranceAnnouncement: String
/** /**
...@@ -49,17 +51,19 @@ interface Group : Contact, CoroutineScope { ...@@ -49,17 +51,19 @@ interface Group : Contact, CoroutineScope {
/** /**
* 坦白说状态. `true` 为允许. * 坦白说状态. `true` 为允许.
* *
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException] * 在修改时将会异步上传至服务器.
*
* @see GroupAllowConfessTalkEvent * @see GroupAllowConfessTalkEvent
* @throws PermissionDeniedException 无权限修改时将会抛出异常
*/ */
var confessTalk: Boolean var confessTalk: Boolean
/** /**
* 允许群员邀请好友入群的状态. `true` 为允许 * 允许群员邀请好友入群的状态. `true` 为允许
* *
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException] * 在修改时将会异步上传至服务器.
* *
* @see GroupAllowMemberInviteEvent * @see GroupAllowMemberInviteEvent
* @throws PermissionDeniedException 无权限修改时将会抛出异常
*/ */
var allowMemberInvite: Boolean var allowMemberInvite: Boolean
/** /**
...@@ -77,10 +81,17 @@ interface Group : Contact, CoroutineScope { ...@@ -77,10 +81,17 @@ interface Group : Contact, CoroutineScope {
override val id: Long override val id: Long
/** /**
* 群主 (同步事件更新) * 群主
*/ */
val owner: Member val owner: Member
/**
* 机器人被禁言还剩余多少秒
*
* @see BotMuteEvent
* @see isBotMuted
*/
val botMuteRemaining: Int
/** /**
* 机器人在这个群里的权限 * 机器人在这个群里的权限
...@@ -124,7 +135,7 @@ interface Group : Contact, CoroutineScope { ...@@ -124,7 +135,7 @@ interface Group : Contact, CoroutineScope {
* 非特殊情况请不要使用这个函数. 优先使用 [get]. * 非特殊情况请不要使用这个函数. 优先使用 [get].
*/ */
@MiraiExperimentalAPI("dangerous") @MiraiExperimentalAPI("dangerous")
@Suppress("INAPPLICABLE_JVM_NAME") @Suppress("INAPPLICABLE_JVM_NAME", "FunctionName")
@JvmName("newMember") @JvmName("newMember")
fun Member(memberInfo: MemberInfo): Member fun Member(memberInfo: MemberInfo): Member
...@@ -168,4 +179,9 @@ interface Group : Contact, CoroutineScope { ...@@ -168,4 +179,9 @@ interface Group : Contact, CoroutineScope {
@MiraiExperimentalAPI @MiraiExperimentalAPI
fun toFullString(): String = "Group(id=${this.id}, name=$name, owner=${owner.id}, members=${members.idContentString})" fun toFullString(): String = "Group(id=${this.id}, name=$name, owner=${owner.id}, members=${members.idContentString})"
} }
\ No newline at end of file
/**
* 返回机器人是否正在被禁言
*/
val Group.isBotMuted: Boolean get() = this.botMuteRemaining == 0
...@@ -57,4 +57,9 @@ interface GroupInfo { ...@@ -57,4 +57,9 @@ interface GroupInfo {
* 全员禁言 * 全员禁言
*/ */
val muteAll: Boolean val muteAll: Boolean
/**
* 机器人被禁言还剩时间, 秒.
*/
val botMuteRemaining: Int
} }
\ No newline at end of file
...@@ -18,6 +18,7 @@ import net.mamoe.mirai.event.CancellableEvent ...@@ -18,6 +18,7 @@ import net.mamoe.mirai.event.CancellableEvent
import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
import net.mamoe.mirai.utils.MiraiExperimentalAPI
@Suppress("unused") @Suppress("unused")
...@@ -123,6 +124,26 @@ data class BotGroupPermissionChangeEvent( ...@@ -123,6 +124,26 @@ data class BotGroupPermissionChangeEvent(
val new: MemberPermission val new: MemberPermission
) : BotPassiveEvent, GroupEvent, Packet ) : BotPassiveEvent, GroupEvent, Packet
/**
* Bot 被禁言
*/
data class BotMuteEvent(
val durationSeconds: Int,
override val group: Group,
/**
* 操作人. 为 null 则为机器人操作
*/
val operator: Member?
) : GroupEvent, Packet, BotPassiveEvent
/**
* Bot 加入了一个新群
*/
@MiraiExperimentalAPI
data class BotJoinGroupEvent(
override val group: Group
) : BotPassiveEvent, GroupEvent, Packet
// region 群设置 // region 群设置
/** /**
...@@ -219,7 +240,7 @@ data class GroupAllowMemberInviteEvent( ...@@ -219,7 +240,7 @@ data class GroupAllowMemberInviteEvent(
/** /**
* 成员加入群的事件 * 成员加入群的事件
*/ */
data class MemberJoinEvent(override val member: Member) : GroupMemberEvent, BotPassiveEvent data class MemberJoinEvent(override val member: Member) : GroupMemberEvent, BotPassiveEvent, Packet
/** /**
* 成员离开群的事件 * 成员离开群的事件
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment