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
8454d782
Commit
8454d782
authored
Feb 22, 2020
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move `recall` from `Contact` to `Group`
parent
7ffbccb9
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
100 additions
and
79 deletions
+100
-79
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
...ommonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
+1
-15
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
...mmonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
+18
-4
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
+81
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
...re/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
+0
-60
No files found.
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt
View file @
8454d782
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.qqandroid.network.highway.HighwayHelper
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.qqandroid.network.highway.HighwayHelper
import
net.mamoe.mirai.qqandroid.network.highway.postImage
import
net.mamoe.mirai.qqandroid.network.highway.postImage
import
net.mamoe.mirai.qqandroid.network.protocol.data.jce.StTroopMemberInfo
import
net.mamoe.mirai.qqandroid.network.protocol.data.jce.StTroopMemberInfo
import
net.mamoe.mirai.qqandroid.network.protocol.data.proto.Cmd0x352
import
net.mamoe.mirai.qqandroid.network.protocol.data.proto.Cmd0x352
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.PbMessageSvc
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.ImgStore
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.ImgStore
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.LongConn
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.LongConn
...
@@ -505,25 +504,12 @@ internal class GroupImpl(
...
@@ -505,25 +504,12 @@ internal class GroupImpl(
}
}
}
}
@MiraiExperimentalAPI
override
suspend
fun
quit
():
Boolean
{
override
suspend
fun
quit
():
Boolean
{
check
(
botPermission
!=
MemberPermission
.
OWNER
)
{
"An owner cannot quit from a owning group"
}
check
(
botPermission
!=
MemberPermission
.
OWNER
)
{
"An owner cannot quit from a owning group"
}
TODO
(
"not implemented"
)
TODO
(
"not implemented"
)
}
}
override
suspend
fun
recall
(
source
:
MessageSource
)
{
if
(
source
.
senderId
!=
bot
.
uin
)
{
checkBotPermissionOperator
()
}
source
.
ensureSequenceIdAvailable
()
bot
.
network
.
run
{
val
response
=
PbMessageSvc
.
PbMsgWithDraw
.
Group
(
bot
.
client
,
this
@GroupImpl
.
id
,
source
.
sequenceId
,
source
.
messageUid
.
toInt
())
.
sendAndExpect
<
PbMessageSvc
.
PbMsgWithDraw
.
Response
>()
check
(
response
is
PbMessageSvc
.
PbMsgWithDraw
.
Response
.
Success
)
{
"Failed to recall message #${source.sequenceId}: $response"
}
}
}
@UseExperimental
(
MiraiExperimentalAPI
::
class
)
@UseExperimental
(
MiraiExperimentalAPI
::
class
)
override
fun
Member
(
memberInfo
:
MemberInfo
):
Member
{
override
fun
Member
(
memberInfo
:
MemberInfo
):
Member
{
return
MemberImpl
(
return
MemberImpl
(
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
View file @
8454d782
...
@@ -12,18 +12,17 @@ package net.mamoe.mirai.qqandroid
...
@@ -12,18 +12,17 @@ package net.mamoe.mirai.qqandroid
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.BotImpl
import
net.mamoe.mirai.BotImpl
import
net.mamoe.mirai.contact.ContactList
import
net.mamoe.mirai.contact.*
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.contact.filteringGetOrNull
import
net.mamoe.mirai.data.AddFriendResult
import
net.mamoe.mirai.data.AddFriendResult
import
net.mamoe.mirai.data.FriendInfo
import
net.mamoe.mirai.data.FriendInfo
import
net.mamoe.mirai.data.GroupInfo
import
net.mamoe.mirai.data.GroupInfo
import
net.mamoe.mirai.data.MemberInfo
import
net.mamoe.mirai.data.MemberInfo
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.message.data.MessageSource
import
net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
import
net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
import
net.mamoe.mirai.qqandroid.network.QQAndroidClient
import
net.mamoe.mirai.qqandroid.network.QQAndroidClient
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.GroupInfoImpl
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.GroupInfoImpl
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.PbMessageSvc
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
import
net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList
import
net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.*
...
@@ -119,6 +118,21 @@ internal abstract class QQAndroidBotBase constructor(
...
@@ -119,6 +118,21 @@ internal abstract class QQAndroidBotBase constructor(
TODO
(
"not implemented"
)
TODO
(
"not implemented"
)
}
}
override
suspend
fun
recall
(
source
:
MessageSource
)
{
if
(
source
.
senderId
!=
uin
)
{
getGroup
(
source
.
groupId
).
checkBotPermissionOperator
()
}
source
.
ensureSequenceIdAvailable
()
network
.
run
{
val
response
:
PbMessageSvc
.
PbMsgWithDraw
.
Response
=
PbMessageSvc
.
PbMsgWithDraw
.
Group
(
bot
.
client
,
source
.
groupId
,
source
.
sequenceId
,
source
.
messageUid
)
.
sendAndExpect
()
check
(
response
is
PbMessageSvc
.
PbMsgWithDraw
.
Response
.
Success
)
{
"Failed to recall message #${source.sequenceId}: $response"
}
}
}
override
suspend
fun
Image
.
download
():
ByteReadPacket
{
override
suspend
fun
Image
.
download
():
ByteReadPacket
{
TODO
(
"not implemented"
)
TODO
(
"not implemented"
)
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
View file @
8454d782
...
@@ -11,8 +11,10 @@
...
@@ -11,8 +11,10 @@
package
net.mamoe.mirai
package
net.mamoe.mirai
import
kotlinx.coroutines.CoroutineName
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.launch
import
kotlinx.io.OutputStream
import
kotlinx.io.OutputStream
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.IoBuffer
import
kotlinx.io.core.IoBuffer
...
@@ -23,10 +25,14 @@ import net.mamoe.mirai.data.FriendInfo
...
@@ -23,10 +25,14 @@ import net.mamoe.mirai.data.FriendInfo
import
net.mamoe.mirai.data.GroupInfo
import
net.mamoe.mirai.data.GroupInfo
import
net.mamoe.mirai.data.MemberInfo
import
net.mamoe.mirai.data.MemberInfo
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.MessageSource
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.LoginFailedException
import
net.mamoe.mirai.network.LoginFailedException
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.io.transferTo
import
net.mamoe.mirai.utils.io.transferTo
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
import
kotlin.jvm.JvmStatic
import
kotlin.jvm.JvmStatic
/**
/**
...
@@ -208,12 +214,37 @@ abstract class Bot : CoroutineScope {
...
@@ -208,12 +214,37 @@ abstract class Bot : CoroutineScope {
// region actions
// region actions
/**
* 撤回这条消息.
*
* [Bot] 撤回自己的消息不需要权限.
* [Bot] 撤回群员的消息需要管理员权限.
*
* @throws PermissionDeniedException 当 [Bot] 无权限操作时
* @see Bot.recall (扩展函数) 接受参数 [MessageChain]
*/
// source.groupId, source.sequenceId, source.messageUid
abstract
suspend
fun
recall
(
source
:
MessageSource
)
/**
* 撤回这条消息.
*
* [Bot] 撤回自己的消息不需要权限.
* [Bot] 撤回群员的消息需要管理员权限.
*
* @throws PermissionDeniedException 当 [Bot] 无权限操作时
* @see Bot.recall (扩展函数) 接受参数 [MessageChain]
* @see 更推荐说
*/
abstract
suspend
fun
recall
(
groupId
:
Long
,
messageSequenceId
:
Int
,
messageUid
:
Int
)
@Deprecated
(
"内存使用效率十分低下"
,
ReplaceWith
(
"this.download()"
),
DeprecationLevel
.
WARNING
)
@Deprecated
(
"内存使用效率十分低下"
,
ReplaceWith
(
"this.download()"
),
DeprecationLevel
.
WARNING
)
@MiraiExperimentalAPI
(
"未支持"
)
abstract
suspend
fun
Image
.
downloadAsByteArray
():
ByteArray
abstract
suspend
fun
Image
.
downloadAsByteArray
():
ByteArray
/**
/**
* 将图片下载到内存中 (使用 [IoBuffer.Pool])
* 将图片下载到内存中 (使用 [IoBuffer.Pool])
*/
*/
@MiraiExperimentalAPI
(
"未支持"
)
abstract
suspend
fun
Image
.
download
():
ByteReadPacket
abstract
suspend
fun
Image
.
download
():
ByteReadPacket
/**
/**
...
@@ -222,11 +253,13 @@ abstract class Bot : CoroutineScope {
...
@@ -222,11 +253,13 @@ abstract class Bot : CoroutineScope {
* @param message 若需要验证请求时的验证消息.
* @param message 若需要验证请求时的验证消息.
* @param remark 好友备注
* @param remark 好友备注
*/
*/
@MiraiExperimentalAPI
(
"未支持"
)
abstract
suspend
fun
addFriend
(
id
:
Long
,
message
:
String
?
=
null
,
remark
:
String
?
=
null
):
AddFriendResult
abstract
suspend
fun
addFriend
(
id
:
Long
,
message
:
String
?
=
null
,
remark
:
String
?
=
null
):
AddFriendResult
/**
/**
* 同意来自陌生人的加好友请求
* 同意来自陌生人的加好友请求
*/
*/
@MiraiExperimentalAPI
(
"未支持"
)
abstract
suspend
fun
approveFriendAddRequest
(
id
:
Long
,
remark
:
String
?)
abstract
suspend
fun
approveFriendAddRequest
(
id
:
Long
,
remark
:
String
?)
// endregion
// endregion
...
@@ -252,12 +285,60 @@ abstract class Bot : CoroutineScope {
...
@@ -252,12 +285,60 @@ abstract class Bot : CoroutineScope {
/**
/**
* 需要调用者自行 close [output]
* 需要调用者自行 close [output]
*/
*/
@MiraiExperimentalAPI
(
"未支持"
)
suspend
inline
fun
Image
.
downloadTo
(
output
:
OutputStream
)
=
suspend
inline
fun
Image
.
downloadTo
(
output
:
OutputStream
)
=
download
().
use
{
input
->
input
.
transferTo
(
output
)
}
download
().
use
{
input
->
input
.
transferTo
(
output
)
}
// endregion
// endregion
}
}
/**
* 撤回这条消息.
* 根据 [message] 内的 [MessageSource] 进行相关判断.
*
* [Bot] 撤回自己的消息不需要权限.
* [Bot] 撤回群员的消息需要管理员权限.
*
* @throws PermissionDeniedException 当 [Bot] 无权限操作时
* @see Bot.recall
*/
@MiraiExperimentalAPI
suspend
inline
fun
Bot
.
recall
(
message
:
MessageChain
)
=
this
.
recall
(
message
[
MessageSource
])
/**
* 在一段时间后撤回这条消息.
* 将根据 [MessageSource.groupId] 判断消息是群消息还是好友消息.
*
* @param millis 延迟的时间, 单位为毫秒
* @param coroutineContext 额外的 [CoroutineContext]
* @see recall
*/
fun
Bot
.
recallIn
(
source
:
MessageSource
,
millis
:
Long
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
):
Job
=
this
.
launch
(
coroutineContext
+
CoroutineName
(
"MessageRecall"
))
{
kotlinx
.
coroutines
.
delay
(
millis
)
recall
(
source
)
}
/**
* 在一段时间后撤回这条消息.
*
* @param millis 延迟的时间, 单位为毫秒
* @param coroutineContext 额外的 [CoroutineContext]
* @see recall
*/
@MiraiExperimentalAPI
fun
Bot
.
recallIn
(
message
:
MessageChain
,
millis
:
Long
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
):
Job
=
this
.
launch
(
coroutineContext
+
CoroutineName
(
"MessageRecall"
))
{
kotlinx
.
coroutines
.
delay
(
millis
)
recall
(
message
)
}
/**
/**
* 关闭这个 [Bot], 停止一切相关活动. 所有引用都会被释放.
* 关闭这个 [Bot], 停止一切相关活动. 所有引用都会被释放.
*
*
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
View file @
8454d782
...
@@ -11,10 +11,7 @@
...
@@ -11,10 +11,7 @@
package
net.mamoe.mirai.contact
package
net.mamoe.mirai.contact
import
kotlinx.coroutines.CoroutineName
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.launch
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.data.MemberInfo
import
net.mamoe.mirai.data.MemberInfo
import
net.mamoe.mirai.event.events.*
import
net.mamoe.mirai.event.events.*
...
@@ -22,10 +19,7 @@ import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
...
@@ -22,10 +19,7 @@ import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import
net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import
net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import
net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.message.data.MessageChain
import
net.mamoe.mirai.message.data.MessageChain
import
net.mamoe.mirai.message.data.MessageSource
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmName
/**
/**
...
@@ -151,17 +145,6 @@ interface Group : Contact, CoroutineScope {
...
@@ -151,17 +145,6 @@ interface Group : Contact, CoroutineScope {
@MiraiExperimentalAPI
(
"还未支持"
)
@MiraiExperimentalAPI
(
"还未支持"
)
suspend
fun
quit
():
Boolean
suspend
fun
quit
():
Boolean
/**
* 撤回这条消息.
*
* [Bot] 撤回自己的消息不需要权限.
* [Bot] 撤回群员的消息需要管理员权限.
*
* @throws PermissionDeniedException 当 [Bot] 无权限操作时
* @see Group.recall (扩展函数) 接受参数 [MessageChain]
*/
suspend
fun
recall
(
source
:
MessageSource
)
/**
/**
* 构造一个 [Member].
* 构造一个 [Member].
* 非特殊情况请不要使用这个函数. 优先使用 [get].
* 非特殊情况请不要使用这个函数. 优先使用 [get].
...
@@ -226,49 +209,6 @@ interface Group : Contact, CoroutineScope {
...
@@ -226,49 +209,6 @@ interface Group : Contact, CoroutineScope {
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})"
}
}
/**
* 撤回这条消息.
*
* [Bot] 撤回自己的消息不需要权限.
* [Bot] 撤回群员的消息需要管理员权限.
*
* @throws PermissionDeniedException 当 [Bot] 无权限操作时
* @see Group.recall
*/
suspend
inline
fun
Group
.
recall
(
message
:
MessageChain
)
=
this
.
recall
(
message
[
MessageSource
])
/**
* 在一段时间后撤回这条消息.
*
* @param millis 延迟的时间, 单位为毫秒
* @param coroutineContext 额外的 [CoroutineContext]
* @see recall
*/
fun
Group
.
recallIn
(
message
:
MessageSource
,
millis
:
Long
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
):
Job
=
this
.
launch
(
coroutineContext
+
CoroutineName
(
"MessageRecall"
))
{
kotlinx
.
coroutines
.
delay
(
millis
)
recall
(
message
)
}
/**
* 在一段时间后撤回这条消息.
*
* @param millis 延迟的时间, 单位为毫秒
* @param coroutineContext 额外的 [CoroutineContext]
* @see recall
*/
fun
Group
.
recallIn
(
message
:
MessageChain
,
millis
:
Long
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
):
Job
=
this
.
launch
(
coroutineContext
+
CoroutineName
(
"MessageRecall"
))
{
kotlinx
.
coroutines
.
delay
(
millis
)
recall
(
message
)
}
/**
/**
* 返回机器人是否正在被禁言
* 返回机器人是否正在被禁言
*
*
...
...
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