Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
049cf306
Commit
049cf306
authored
Feb 11, 2020
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New event design
parent
63b5785b
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
346 additions
and
67 deletions
+346
-67
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/GroupManageRouteModule.kt
.../net/mamoe/mirai/api/http/route/GroupManageRouteModule.kt
+4
-3
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
...ommonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
+5
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
+1
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
...e/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
+9
-5
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/ActiveEvents.kt
...nMain/kotlin/net.mamoe.mirai/event/events/ActiveEvents.kt
+0
-53
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
...mmonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
+324
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/types.kt
...c/commonMain/kotlin/net.mamoe.mirai/event/events/types.kt
+1
-2
mirai-plugins/image-sender/src/main/java/net/mamoe/mirai/imageplugin/ImageSenderMain.kt
.../main/java/net/mamoe/mirai/imageplugin/ImageSenderMain.kt
+2
-2
No files found.
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/GroupManageRouteModule.kt
View file @
049cf306
...
...
@@ -4,7 +4,8 @@ import io.ktor.application.Application
import
io.ktor.application.call
import
io.ktor.routing.routing
import
kotlinx.serialization.Serializable
import
net.mamoe.mirai.api.http.data.*
import
net.mamoe.mirai.api.http.data.PermissionDeniedException
import
net.mamoe.mirai.api.http.data.StateCode
import
net.mamoe.mirai.api.http.data.common.DTO
import
net.mamoe.mirai.api.http.data.common.VerifyDTO
import
net.mamoe.mirai.contact.Group
...
...
@@ -84,7 +85,7 @@ fun Application.groupManageModule() {
miraiVerify
<
MemberInfoDTO
>(
"/memberInfo"
)
{
dto
->
val
member
=
dto
.
session
.
bot
.
getGroup
(
dto
.
target
)[
dto
.
memberId
]
with
(
dto
.
info
)
{
name
?.
let
{
member
.
group
Card
=
it
}
name
?.
let
{
member
.
name
Card
=
it
}
specialTitle
?.
let
{
member
.
specialTitle
=
it
}
}
call
.
respondStateCode
(
StateCode
.
Success
)
...
...
@@ -145,5 +146,5 @@ private data class MemberDetailDTO(
val
name
:
String
?
=
null
,
val
specialTitle
:
String
?
=
null
)
:
DTO
{
constructor
(
member
:
Member
)
:
this
(
member
.
group
Card
,
member
.
specialTitle
)
constructor
(
member
:
Member
)
:
this
(
member
.
name
Card
,
member
.
specialTitle
)
}
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
View file @
049cf306
...
...
@@ -14,6 +14,8 @@ import net.mamoe.mirai.contact.*
import
net.mamoe.mirai.data.FriendNameRemark
import
net.mamoe.mirai.data.PreviousNameList
import
net.mamoe.mirai.data.Profile
import
net.mamoe.mirai.event.broadcast
import
net.mamoe.mirai.event.events.MemberCardChangeEvent
import
net.mamoe.mirai.message.data.CustomFaceFromFile
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.message.data.MessageChain
...
...
@@ -149,13 +151,15 @@ internal class MemberImpl(
override
val
group
:
GroupImpl
by
group
.
unsafeWeakRef
()
val
qq
:
QQImpl
by
qq
.
unsafeWeakRef
()
override
var
group
Card
:
String
override
var
name
Card
:
String
get
()
=
_groupCard
set
(
newValue
)
{
group
.
checkBotPermissionOperator
()
if
(
_groupCard
!=
newValue
)
{
val
oldValue
=
_groupCard
_groupCard
=
newValue
launch
{
MemberCardChangeEvent
.
ByBot
(
oldValue
,
newValue
,
this
@MemberImpl
).
broadcast
()
bot
.
network
.
run
{
TroopManagement
.
EditGroupNametag
(
bot
.
client
,
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
View file @
049cf306
...
...
@@ -107,7 +107,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
logger
.
info
(
"Initializing BotNetworkHandler"
)
try
{
if
(
::
_network
.
isInitialized
)
{
BotOfflineEvent
(
this
).
broadcast
()
BotOfflineEvent
.
Active
(
this
,
cause
).
broadcast
()
_network
.
closeAndJoin
(
cause
)
}
}
catch
(
e
:
Exception
)
{
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
View file @
049cf306
...
...
@@ -11,8 +11,9 @@
package
net.mamoe.mirai.contact
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.events.MemberCardChangeEvent
import
net.mamoe.mirai.utils.WeakRefProperty
import
kotlin.jvm.JvmName
import
kotlin.time.Duration
import
kotlin.time.ExperimentalTime
...
...
@@ -32,18 +33,21 @@ interface Member : QQ, Contact {
val
permission
:
MemberPermission
/**
* 群名片. 可能为空.
* 群名片. 可能为空.
修改时将会触发事件
*
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException]
*
* @see [groupCardOrNick] 获取非空群名片或昵称
* @see MemberCardChangeEvent 群名片被管理员, 自己或 [Bot] 改动事件
*/
var
group
Card
:
String
var
name
Card
:
String
/**
* 群头衔
*
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException]
*
* @see MemberSpecialTitleChangeEvent 群名片被管理员, 自己或 [Bot] 改动事件
*/
var
specialTitle
:
String
...
...
@@ -78,9 +82,9 @@ interface Member : QQ, Contact {
/**
* 获取非空群名片或昵称.
*
* 若 [群名片][Member.
group
Card] 不为空则返回群名片, 为空则返回 [QQ.nick]
* 若 [群名片][Member.
name
Card] 不为空则返回群名片, 为空则返回 [QQ.nick]
*/
val
Member
.
groupCardOrNick
:
String
get
()
=
this
.
group
Card
.
takeIf
{
it
.
isNotEmpty
()
}
?:
this
.
nick
val
Member
.
groupCardOrNick
:
String
get
()
=
this
.
name
Card
.
takeIf
{
it
.
isNotEmpty
()
}
?:
this
.
nick
@ExperimentalTime
suspend
inline
fun
Member
.
mute
(
duration
:
Duration
):
Boolean
{
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/ActiveEvents.kt
deleted
100644 → 0
View file @
63b5785b
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package
net.mamoe.mirai.event.events
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.QQ
/**
* [Bot] 登录完成, 好友列表, 群组列表初始化完成
*/
data class
BotLoginSucceedEvent
(
override
val
bot
:
Bot
)
:
BotActiveEvent
()
/**
* [Bot] 主动离线.
*/
data class
BotOfflineEvent
(
override
val
bot
:
Bot
)
:
BotActiveEvent
()
// region 好友
/**
* [Bot] 删除一个好友
*/
class
BotRemoveFriendEvent
(
override
val
friend
:
QQ
)
:
FriendEvent
,
BotActiveEvent
()
// endregion
// region 群
/**
* 机器人踢出某个群员
*/
class
BotKickMemberEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotActiveEvent
()
/**
* 机器人禁言某个群成员
*/
class
BotMuteMemberEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotActiveEvent
()
/**
* 机器人取消禁言某个群成员
*/
class
BotUnmuteMemberEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotActiveEvent
()
// endregion
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/
Passive
Events.kt
→
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/
Bot
Events.kt
View file @
049cf306
...
...
@@ -13,18 +13,31 @@ import net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.data.Packet
// region Bot 在线状态
// region Bot 状态
/**
* [Bot] 登录完成, 好友列表, 群组列表初始化完成
*/
data class
BotOnlineEvent
(
override
val
bot
:
Bot
)
:
BotActiveEvent
/**
*
被挤下线
*
[Bot] 离线.
*/
data class
BotForceOfflineEvent
(
override
val
bot
:
Bot
,
val
title
:
String
,
val
tips
:
String
)
:
BotPassiveEvent
,
Packet
sealed
class
BotOfflineEvent
:
BotActiveEvent
{
/**
* 主动离线
*/
data class
Active
(
override
val
bot
:
Bot
,
val
cause
:
Throwable
?)
:
BotOfflineEvent
()
/**
* 被挤下线
*/
data class
Force
(
override
val
bot
:
Bot
)
:
BotOfflineEvent
()
}
// endregion
// region 群
...
...
@@ -41,43 +54,93 @@ data class BotGroupPermissionChangeEvent(
// region 群设置
/**
* 群设置改变
* 群设置改变
. 此事件广播前修改就已经完成.
*/
interface
GroupSettingChangeEvent
<
T
>
:
GroupEvent
,
BotPassiveEvent
{
val
operator
:
Member
val
origin
:
T
val
new
:
T
override
val
group
:
Group
get
()
=
operator
.
group
}
/**
* 群名改变
* 群名改变
. 此事件广播前修改就已经完成.
*/
data class
GroupNameChangeEvent
(
override
val
operator
:
Member
,
override
val
origin
:
String
,
override
val
new
:
String
)
:
GroupSettingChangeEvent
<
String
>,
BotPassiveEvent
sealed
class
GroupNameChangeEvent
(
)
:
GroupSettingChangeEvent
<
String
>,
BotPassiveEvent
{
/**
* 由管理员操作
*/
data class
ByOperator
(
override
val
origin
:
String
,
override
val
new
:
String
,
val
operator
:
Member
)
:
GroupNameChangeEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
}
/**
* 由机器人操作
*/
data class
ByBot
(
override
val
origin
:
String
,
override
val
new
:
String
,
override
val
group
:
Group
)
:
GroupNameChangeEvent
()
}
/**
* 群 "全员禁言" 功能状态改变
* 群 "全员禁言" 功能状态改变
. 此事件广播前修改就已经完成.
*/
data class
GroupMuteAllEvent
(
override
val
operator
:
Member
,
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
)
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
sealed
class
GroupMuteAllEvent
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
{
/**
* 由管理员操作
*/
data class
ByOperator
(
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
,
val
operator
:
Member
)
:
GroupMuteAllEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
}
/**
* 由机器人操作
*/
data class
ByBot
(
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
,
override
val
group
:
Group
)
:
GroupMuteAllEvent
()
}
/**
* 群 "坦白说" 功能状态改变
* 群 "坦白说" 功能状态改变
. 此事件广播前修改就已经完成.
*/
data class
GroupConfessTalkEvent
(
override
val
operator
:
Member
,
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
)
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
sealed
class
GroupConfessTalkEvent
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
{
/**
* 由管理员操作
*/
data class
ByOperator
(
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
,
val
operator
:
Member
)
:
GroupConfessTalkEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
}
/**
* 由机器人操作
*/
data class
ByBot
(
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
,
override
val
group
:
Group
)
:
GroupConfessTalkEvent
()
}
// endregion
...
...
@@ -94,13 +157,26 @@ data class MemberJoinEvent(override val member: Member) : GroupMemberEvent, BotP
/**
* 成员离开群的事件
*/
sealed
class
MemberLeftEvent
:
GroupMemberEvent
,
BotPassiveEvent
{
sealed
class
MemberLeftEvent
:
GroupMemberEvent
{
/**
* 成员被踢出群. 成员不可能是机器人自己.
*
* @see BotKickMemberEvent 机器人踢出一个人
*/
data class
Kick
(
override
val
member
:
Member
,
val
operator
:
Member
)
:
MemberLeftEvent
()
sealed
class
Kick
:
MemberLeftEvent
()
{
/**
* 被管理员踢出
*/
data class
ByOperator
(
override
val
member
:
Member
,
val
operator
:
Member
)
:
Kick
(),
BotPassiveEvent
/**
* 被机器人踢出
*/
data class
ByBot
(
override
val
member
:
Member
)
:
Kick
(),
BotActiveEvent
}
/**
* 成员主动离开
...
...
@@ -110,35 +186,70 @@ sealed class MemberLeftEvent : GroupMemberEvent, BotPassiveEvent {
// endregion
// region
// region
名片和头衔
/**
* 群名片改动
* 群名片改动
. 此事件广播前修改就已经完成.
*/
sealed
class
MemberCardChangeEvent
:
GroupMemberEvent
,
BotPassiveEvent
{
sealed
class
MemberCardChangeEvent
:
GroupMemberEvent
{
/**
*
群名片
*
修改前
*/
abstract
val
card
:
String
abstract
val
origin
:
String
/**
* 修改后
*/
abstract
val
new
:
String
abstract
override
val
member
:
Member
/**
* 由管理员修改
*/
data class
ByOperator
(
override
val
card
:
String
,
override
val
origin
:
String
,
override
val
new
:
String
,
override
val
member
:
Member
,
val
operator
:
Member
)
:
MemberCardChangeEvent
()
)
:
MemberCardChangeEvent
(),
BotPassiveEvent
/**
* 由 [Bot] 修改. 由 [Member.nameCard]
*/
data class
ByBot
(
override
val
origin
:
String
,
override
val
new
:
String
,
override
val
member
:
Member
)
:
MemberCardChangeEvent
(),
BotActiveEvent
/**
* 该成员自己修改
*/
data class
BySelf
(
override
val
card
:
String
,
override
val
origin
:
String
,
override
val
new
:
String
,
override
val
member
:
Member
)
:
MemberCardChangeEvent
()
)
:
MemberCardChangeEvent
()
,
BotPassiveEvent
}
/**
* 群头衔改动. 一定为群主操作
*/
data class
MemberSpecialTitleChangeEvent
(
/**
* 修改前
*/
val
origin
:
String
,
/**
* 修改后
*/
val
new
:
String
,
override
val
member
:
Member
)
:
GroupMemberEvent
// endregion
...
...
@@ -148,7 +259,6 @@ sealed class MemberCardChangeEvent : GroupMemberEvent, BotPassiveEvent {
* 成员权限改变的事件. 成员不可能是机器人自己.
*/
data class
MemberPermissionChangeEvent
(
override
val
bot
:
Bot
,
override
val
member
:
Member
,
val
origin
:
MemberPermission
,
val
new
:
MemberPermission
...
...
@@ -161,23 +271,51 @@ data class MemberPermissionChangeEvent(
/**
* 群成员被禁言事件. 操作人和被禁言的成员都不可能是机器人本人
*
* @see BotMuteMemberEvent 机器人禁言一个人
*/
data class
MemberMuteEvent
(
override
val
member
:
Member
,
val
operator
:
Member
,
val
durationSeconds
:
Int
)
:
GroupMemberEvent
,
BotPassiveEvent
{
override
fun
toString
():
String
=
"MemberMuteEvent(member=${member.id}, group=${group.id}, operator=${operator.id}, duration=${durationSeconds}s"
sealed
class
MemberMuteEvent
:
GroupMemberEvent
{
abstract
override
val
member
:
Member
abstract
val
durationSeconds
:
Int
/**
* 管理员禁言成员
*/
data class
ByOperator
(
override
val
member
:
Member
,
override
val
durationSeconds
:
Int
,
val
operator
:
Member
)
:
MemberMuteEvent
(),
BotPassiveEvent
/**
* 机器人禁言成员. 通过 [Member.mute] 触发
*/
data class
ByBot
(
override
val
member
:
Member
,
override
var
durationSeconds
:
Int
)
:
MemberMuteEvent
(),
BotActiveEvent
}
/**
* 群成员被取消禁言事件. 操作人和被禁言的成员都不可能是机器人本人
*
* @see BotUnmuteMemberEvent 机器人取消禁言某个人
*/
data class
MemberUnmuteEvent
(
override
val
member
:
Member
,
val
operator
:
Member
)
:
GroupMemberEvent
,
BotPassiveEvent
sealed
class
MemberUnmuteEvent
:
GroupMemberEvent
,
BotPassiveEvent
{
abstract
override
val
member
:
Member
/**
* 管理员禁言成员
*/
data class
ByOperator
(
override
val
member
:
Member
,
val
operator
:
Member
)
:
MemberUnmuteEvent
(),
BotPassiveEvent
/**
* 机器人禁言成员. 通过 [Member.unmute] 触发
*/
data class
ByBot
(
override
val
member
:
Member
)
:
MemberUnmuteEvent
(),
BotActiveEvent
}
// endregion
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/types.kt
View file @
049cf306
...
...
@@ -13,7 +13,6 @@ import net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.event.AbstractCancellableEvent
import
net.mamoe.mirai.event.Event
/**
...
...
@@ -31,7 +30,7 @@ interface BotPassiveEvent : BotEvent
/**
* 由 [Bot] 主动发起的动作的事件
*/
abstract
class
BotActiveEvent
:
BotEvent
,
AbstractCancellableEvent
()
interface
BotActiveEvent
:
BotEvent
/**
...
...
mirai-plugins/image-sender/src/main/java/net/mamoe/mirai/imageplugin/ImageSenderMain.kt
View file @
049cf306
...
...
@@ -11,7 +11,7 @@ package net.mamoe.mirai.imageplugin
import
kotlinx.coroutines.ExperimentalCoroutinesApi
import
kotlinx.coroutines.GlobalScope
import
net.mamoe.mirai.event.events.Bot
LoginSucceed
Event
import
net.mamoe.mirai.event.events.Bot
Online
Event
import
net.mamoe.mirai.event.subscribeAlways
import
net.mamoe.mirai.event.subscribeMessages
import
net.mamoe.mirai.plugin.PluginBase
...
...
@@ -22,7 +22,7 @@ class ImageSenderMain : PluginBase() {
@MiraiExperimentalAPI
override
fun
onEnable
()
{
logger
.
info
(
"Image Sender plugin enabled"
)
GlobalScope
.
subscribeAlways
<
Bot
LoginSucceed
Event
>
{
GlobalScope
.
subscribeAlways
<
Bot
Online
Event
>
{
logger
.
info
(
"${this.bot.uin} login succeed, it will be controlled by Image Sender Plugin"
)
this
.
bot
.
subscribeMessages
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment