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
bc71475f
Commit
bc71475f
authored
Feb 11, 2020
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add event broadcasting
parent
96db7a60
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
238 additions
and
60 deletions
+238
-60
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/GroupManageRouteModule.kt
.../net/mamoe/mirai/api/http/route/GroupManageRouteModule.kt
+2
-2
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
...ommonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
+57
-14
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt
...qqandroid/network/protocol/packet/chat/TroopManagement.kt
+3
-19
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt
.../src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt
+10
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
...re/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
+14
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
...e/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
+11
-3
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/QQ.kt
...-core/src/commonMain/kotlin/net.mamoe.mirai/contact/QQ.kt
+4
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/Subscribable.kt
...c/commonMain/kotlin/net.mamoe.mirai/event/Subscribable.kt
+3
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
...mmonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
+133
-11
mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
...rai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
+0
-8
mirai-japt/src/main/kotlin/net/mamoe/mirai/japt/internal/BlockingContactsImpl.kt
...lin/net/mamoe/mirai/japt/internal/BlockingContactsImpl.kt
+1
-1
No files found.
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/GroupManageRouteModule.kt
View file @
bc71475f
...
...
@@ -64,7 +64,7 @@ fun Application.groupManageModule() {
val
group
=
dto
.
session
.
bot
.
getGroup
(
dto
.
target
)
with
(
dto
.
config
)
{
name
?.
let
{
group
.
name
=
it
}
announcement
?.
let
{
group
.
a
nnouncement
=
it
}
announcement
?.
let
{
group
.
entranceA
nnouncement
=
it
}
confessTalk
?.
let
{
group
.
confessTalk
=
it
}
allowMemberInvite
?.
let
{
group
.
allowMemberInvite
=
it
}
// TODO: 待core接口实现设置可改
...
...
@@ -128,7 +128,7 @@ private data class GroupDetailDTO(
val
anonymousChat
:
Boolean
?
=
null
)
:
DTO
{
constructor
(
group
:
Group
)
:
this
(
group
.
name
,
group
.
a
nnouncement
,
group
.
confessTalk
,
group
.
allowMemberInvite
,
group
.
name
,
group
.
entranceA
nnouncement
,
group
.
confessTalk
,
group
.
allowMemberInvite
,
group
.
autoApprove
,
group
.
anonymousChat
)
}
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
View file @
bc71475f
This diff is collapsed.
Click to expand it.
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt
View file @
bc71475f
...
...
@@ -27,7 +27,6 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY
import
net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacketFactory
import
net.mamoe.mirai.qqandroid.network.protocol.packet.buildOutgoingUniPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement.GetGroupOperationInfo.decode
import
net.mamoe.mirai.utils.daysToSeconds
import
net.mamoe.mirai.utils.io.encodeToString
...
...
@@ -66,9 +65,7 @@ internal class TroopManagement {
}
object
Response
:
Packet
{
override
fun
toString
():
String
{
return
"Response(Mute)"
}
override
fun
toString
():
String
=
"Response(Mute)"
}
}
...
...
@@ -80,9 +77,7 @@ internal class TroopManagement {
val
autoApprove
:
Boolean
,
val
confessTalk
:
Boolean
)
:
Packet
{
override
fun
toString
():
String
{
return
"Response(GroupInfo)"
}
override
fun
toString
():
String
=
"Response(GroupInfo)"
}
operator
fun
invoke
(
...
...
@@ -146,9 +141,7 @@ internal class TroopManagement {
class
Response
(
val
success
:
Boolean
)
:
Packet
{
override
fun
toString
():
String
{
return
"Response(Kick Member)"
}
override
fun
toString
():
String
=
"Response(Kick Member)"
}
operator
fun
invoke
(
...
...
@@ -424,13 +417,4 @@ internal class TroopManagement {
}
}
/*
internal object Recall: OutgoingPacketFactory<WtLogin.Login.LoginPacketResponse>("wtlogin.login"){
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): WtLogin.Login.LoginPacketResponse {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
*/
}
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt
View file @
bc71475f
...
...
@@ -13,6 +13,10 @@ package net.mamoe.mirai.contact
import
kotlinx.coroutines.CoroutineScope
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.events.BeforeImageUploadEvent
import
net.mamoe.mirai.event.events.ImageUploadEvent
import
net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import
net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import
net.mamoe.mirai.message.data.*
import
net.mamoe.mirai.utils.ExternalImage
import
net.mamoe.mirai.utils.WeakRefProperty
...
...
@@ -40,6 +44,9 @@ interface Contact : CoroutineScope {
/**
* 向这个对象发送消息.
*
* @see FriendMessageSendEvent 发送好友信息事件, cancellable
* @see GroupMessageSendEvent 发送群消息事件. cancellable
*/
suspend
fun
sendMessage
(
message
:
MessageChain
)
...
...
@@ -47,6 +54,9 @@ interface Contact : CoroutineScope {
* 上传一个图片以备发送.
* TODO: 群图片与好友图片之间是否通用还不确定.
* TODO: 好友之间图片是否通用还不确定.
*
* @see BeforeImageUploadEvent 图片发送前事件, cancellable
* @see ImageUploadEvent 图片发送完成事件
*/
suspend
fun
uploadImage
(
image
:
ExternalImage
):
Image
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
View file @
bc71475f
...
...
@@ -12,6 +12,7 @@
package
net.mamoe.mirai.contact
import
kotlinx.coroutines.CoroutineScope
import
net.mamoe.mirai.event.events.*
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
/**
...
...
@@ -22,32 +23,41 @@ interface Group : Contact, CoroutineScope {
* 群名称.
*
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException]
* 频繁修改可能会被服务器拒绝.
*
*
注: 频繁修改可能会被服务器拒绝.
*
@see MemberPermissionChangeEvent
*/
var
name
:
String
/**
* 入群公告, 没有时为空字符串.
*
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException]
*
* @see GroupEntranceAnnouncementChangeEvent
*/
var
a
nnouncement
:
String
var
entranceA
nnouncement
:
String
/**
* 全体禁言状态. `true` 为开启.
*
* 当前仅能修改状态.
*
* @see GroupMuteAllEvent
*/
// TODO: 2020/2/5 实现 muteAll 的查询
var
muteAll
:
Boolean
/**
* 坦白说状态. `true` 为允许.
*
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException]
* @see GroupAllowConfessTalkEvent
*/
var
confessTalk
:
Boolean
/**
* 允许群员邀请好友入群的状态. `true` 为允许
*
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException]
*
* @see GroupAllowMemberInviteEvent
*/
var
allowMemberInvite
:
Boolean
/**
...
...
@@ -74,6 +84,8 @@ interface Group : Contact, CoroutineScope {
* 机器人在这个群里的权限
*
* **MiraiExperimentalAPI**: 在未来可能会被修改
*
* @see BotGroupPermissionChangeEvent
*/
@MiraiExperimentalAPI
val
botPermission
:
MemberPermission
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
View file @
bc71475f
...
...
@@ -13,6 +13,9 @@ package net.mamoe.mirai.contact
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.events.MemberCardChangeEvent
import
net.mamoe.mirai.event.events.MemberLeaveEvent
import
net.mamoe.mirai.event.events.MemberMuteEvent
import
net.mamoe.mirai.event.events.MemberSpecialTitleChangeEvent
import
net.mamoe.mirai.utils.WeakRefProperty
import
kotlin.time.Duration
import
kotlin.time.ExperimentalTime
...
...
@@ -38,6 +41,7 @@ interface Member : QQ, Contact {
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException]
*
* @see [groupCardOrNick] 获取非空群名片或昵称
*
* @see MemberCardChangeEvent 群名片被管理员, 自己或 [Bot] 改动事件
*/
var
nameCard
:
String
...
...
@@ -55,7 +59,7 @@ interface Member : QQ, Contact {
* 禁言
*
* @param durationSeconds 持续时间. 精确到秒. 范围区间表示为 `(0s, 30days]`. 超过范围则会抛出异常.
* @return
当机器人无权限禁言这个群成员
时返回 `false`
* @return
机器人无权限
时返回 `false`
*
* @see Int.minutesToSeconds
* @see Int.hoursToSeconds
...
...
@@ -64,12 +68,16 @@ interface Member : QQ, Contact {
suspend
fun
mute
(
durationSeconds
:
Int
):
Boolean
/**
* 解除禁言. 在没有权限时会返回 `false`.
* 解除禁言. 机器人无权限时返回 `false`.
*
* @see MemberMuteEvent 成员被禁言事件.
*/
suspend
fun
unmute
():
Boolean
/**
* 踢出该成员. 机器人无权限时返回 `false`
* 踢出该成员. 机器人无权限时返回 `false`.
*
* @see MemberLeaveEvent.Kick 成员被踢出事件.
*/
suspend
fun
kick
(
message
:
String
=
""
):
Boolean
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/QQ.kt
View file @
bc71475f
...
...
@@ -16,6 +16,7 @@ import net.mamoe.mirai.Bot
import
net.mamoe.mirai.data.FriendNameRemark
import
net.mamoe.mirai.data.PreviousNameList
import
net.mamoe.mirai.data.Profile
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
/**
* QQ 对象.
...
...
@@ -49,6 +50,7 @@ interface QQ : Contact, CoroutineScope {
/**
* 查询用户资料
*/
@MiraiExperimentalAPI
(
"还未支持"
)
suspend
fun
queryProfile
():
Profile
/**
...
...
@@ -58,10 +60,12 @@ interface QQ : Contact, CoroutineScope {
* - 昵称
* - 共同群内的群名片
*/
@MiraiExperimentalAPI
(
"还未支持"
)
suspend
fun
queryPreviousNameList
():
PreviousNameList
/**
* 查询机器人账号给这个人设置的备注
*/
@MiraiExperimentalAPI
(
"还未支持"
)
suspend
fun
queryRemark
():
FriendNameRemark
}
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/Subscribable.kt
View file @
bc71475f
...
...
@@ -70,6 +70,9 @@ abstract class AbstractCancellableEvent : Event, CancellableEvent {
*/
@UseExperimental
(
MiraiInternalAPI
::
class
)
suspend
fun
<
E
:
Event
>
E
.
broadcast
():
E
=
apply
{
if
(
this
is
BroadcastControllable
&&
!
this
.
shouldBroadcast
)
{
return
@
apply
}
if
(
this
is
BotEvent
&&
!(
this
.
bot
as
BotImpl
<
*
>).
onEvent
(
this
))
{
return
@
apply
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
View file @
bc71475f
...
...
@@ -10,9 +10,21 @@
package
net.mamoe.mirai.event.events
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.contact.*
import
net.mamoe.mirai.event.AbstractCancellableEvent
import
net.mamoe.mirai.event.CancellableEvent
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.message.data.MessageChain
import
net.mamoe.mirai.utils.ExternalImage
@Suppress
(
"unused"
)
class
EventCancelledException
:
RuntimeException
{
constructor
()
:
super
()
constructor
(
message
:
String
?)
:
super
(
message
)
constructor
(
message
:
String
?,
cause
:
Throwable
?)
:
super
(
message
,
cause
)
constructor
(
cause
:
Throwable
?)
:
super
(
cause
)
}
// region Bot 状态
...
...
@@ -40,6 +52,64 @@ sealed class BotOfflineEvent : BotActiveEvent {
// endregion
// region 消息
sealed
class
MessageSendEvent
:
BotEvent
,
BotActiveEvent
,
AbstractCancellableEvent
()
{
abstract
val
target
:
Contact
final
override
val
bot
:
Bot
get
()
=
target
.
bot
data class
GroupMessageSendEvent
(
override
val
target
:
Group
,
var
message
:
MessageChain
)
:
MessageSendEvent
(),
CancellableEvent
data class
FriendMessageSendEvent
(
override
val
target
:
QQ
,
var
message
:
MessageChain
)
:
MessageSendEvent
(),
CancellableEvent
}
// endregion
// region 图片
/**
* 图片上传前. 可以阻止上传
*/
data class
BeforeImageUploadEvent
(
val
target
:
Contact
,
val
source
:
ExternalImage
)
:
BotEvent
,
BotActiveEvent
,
AbstractCancellableEvent
()
{
override
val
bot
:
Bot
get
()
=
target
.
bot
}
/**
* 图片上传完成
*/
sealed
class
ImageUploadEvent
:
BotEvent
,
BotActiveEvent
,
AbstractCancellableEvent
()
{
abstract
val
target
:
Contact
abstract
val
source
:
ExternalImage
override
val
bot
:
Bot
get
()
=
target
.
bot
data class
Succeed
(
override
val
target
:
Contact
,
override
val
source
:
ExternalImage
,
val
image
:
Image
)
:
ImageUploadEvent
(),
CancellableEvent
data class
Failed
(
override
val
target
:
Contact
,
override
val
source
:
ExternalImage
,
val
errno
:
Int
,
val
message
:
String
)
:
ImageUploadEvent
(),
CancellableEvent
}
// endregion
// region 群
/**
...
...
@@ -64,8 +134,7 @@ interface GroupSettingChangeEvent<T> : GroupEvent, BotPassiveEvent {
/**
* 群名改变. 此事件广播前修改就已经完成.
*/
sealed
class
GroupNameChangeEvent
(
)
:
GroupSettingChangeEvent
<
String
>,
BotPassiveEvent
{
sealed
class
GroupNameChangeEvent
:
GroupSettingChangeEvent
<
String
>,
BotPassiveEvent
{
/**
* 由管理员操作
...
...
@@ -89,6 +158,34 @@ sealed class GroupNameChangeEvent(
)
:
GroupNameChangeEvent
()
}
/**
* 入群公告改变. 此事件广播前修改就已经完成.
*/
sealed
class
GroupEntranceAnnouncementChangeEvent
:
GroupSettingChangeEvent
<
String
>,
BotPassiveEvent
{
/**
* 由管理员操作
*/
data class
ByOperator
(
override
val
origin
:
String
,
override
val
new
:
String
,
val
operator
:
Member
)
:
GroupEntranceAnnouncementChangeEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
}
/**
* 由机器人操作
*/
data class
ByBot
(
override
val
origin
:
String
,
override
val
new
:
String
,
override
val
group
:
Group
)
:
GroupEntranceAnnouncementChangeEvent
()
}
/**
* 群 "全员禁言" 功能状态改变. 此事件广播前修改就已经完成.
*/
...
...
@@ -118,8 +215,33 @@ sealed class GroupMuteAllEvent : GroupSettingChangeEvent<Boolean>, BotPassiveEve
/**
* 群 "坦白说" 功能状态改变. 此事件广播前修改就已经完成.
*/
sealed
class
GroupConfessTalkEvent
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
{
sealed
class
GroupAllowConfessTalkEvent
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
{
/**
* 由管理员操作
*/
data class
ByOperator
(
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
,
val
operator
:
Member
)
:
GroupAllowConfessTalkEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
}
/**
* 由机器人操作
*/
data class
ByBot
(
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
,
override
val
group
:
Group
)
:
GroupAllowConfessTalkEvent
()
}
/**
* 群 "允许群员邀请好友加群" 功能状态改变. 此事件广播前修改就已经完成.
*/
sealed
class
GroupAllowMemberInviteEvent
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
{
/**
* 由管理员操作
*/
...
...
@@ -127,7 +249,7 @@ sealed class GroupConfessTalkEvent : GroupSettingChangeEvent<Boolean>, BotPassiv
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
,
val
operator
:
Member
)
:
Group
ConfessTalk
Event
()
{
)
:
Group
AllowMemberInvite
Event
()
{
override
val
group
:
Group
get
()
=
operator
.
group
}
...
...
@@ -139,7 +261,7 @@ sealed class GroupConfessTalkEvent : GroupSettingChangeEvent<Boolean>, BotPassiv
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
,
override
val
group
:
Group
)
:
Group
ConfessTalk
Event
()
)
:
Group
AllowMemberInvite
Event
()
}
// endregion
...
...
@@ -157,11 +279,11 @@ data class MemberJoinEvent(override val member: Member) : GroupMemberEvent, BotP
/**
* 成员离开群的事件
*/
sealed
class
MemberLe
ft
Event
:
GroupMemberEvent
{
sealed
class
MemberLe
ave
Event
:
GroupMemberEvent
{
/**
* 成员被踢出群. 成员不可能是机器人自己.
*/
sealed
class
Kick
:
MemberLe
ft
Event
()
{
sealed
class
Kick
:
MemberLe
ave
Event
()
{
/**
* 被管理员踢出
*/
...
...
@@ -181,7 +303,7 @@ sealed class MemberLeftEvent : GroupMemberEvent {
/**
* 成员主动离开
*/
data class
Quit
(
override
val
member
:
Member
)
:
MemberLe
ft
Event
()
data class
Quit
(
override
val
member
:
Member
)
:
MemberLe
ave
Event
()
}
// endregion
...
...
mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
View file @
bc71475f
...
...
@@ -81,14 +81,6 @@ suspend fun main() {
"你好"
reply
"你好!"
startsWith
(
"profile"
,
removePrefix
=
true
)
{
val
account
=
it
.
trim
()
if
(
account
.
isNotEmpty
())
{
bot
.
getFriend
(
account
.
toLong
())
}
else
{
sender
}.
queryProfile
().
toString
().
reply
()
}
"grouplist"
reply
{
//"https://ssl.ptlogin2.qq.com/jump?pt_clientver=5509&pt_src=1&keyindex=9&clientuin=" + bot.qqAccount + "&clientkey=" + com.tick_tock.pctim.utils.Util.byte2HexString(
...
...
mirai-japt/src/main/kotlin/net/mamoe/mirai/japt/internal/BlockingContactsImpl.kt
View file @
bc71475f
...
...
@@ -52,7 +52,7 @@ internal class BlockingGroupImpl(private val delegate: Group) : BlockingGroup {
override
fun
toFullString
():
String
=
delegate
.
toFullString
()
override
fun
getMember
(
id
:
Long
):
BlockingMember
=
delegate
[
id
].
blocking
()
override
fun
getBot
():
BlockingBot
=
delegate
.
bot
.
blocking
()
override
fun
getAnnouncement
():
String
=
delegate
.
a
nnouncement
override
fun
getAnnouncement
():
String
=
delegate
.
entranceA
nnouncement
@UseExperimental
(
MiraiInternalAPI
::
class
)
override
fun
getMembers
():
Map
<
Long
,
BlockingMember
>
=
delegate
.
members
.
delegate
.
toList
().
associateBy
{
it
.
id
}.
mapValues
{
it
.
value
.
blocking
()
}
...
...
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