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
19ca01b4
Commit
19ca01b4
authored
Nov 09, 2019
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
BroadcastControllable
parent
1eb31031
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
104 additions
and
57 deletions
+104
-57
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
+37
-9
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotHelper.kt
...i-core/src/commonMain/kotlin/net.mamoe.mirai/BotHelper.kt
+1
-7
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/Subscribable.kt
...c/commonMain/kotlin/net.mamoe.mirai/event/Subscribable.kt
+8
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/TIMBotNetworkHandler.kt
....mamoe.mirai/network/protocol/tim/TIMBotNetworkHandler.kt
+1
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/action/AddContact.kt
...oe.mirai/network/protocol/tim/packet/action/AddContact.kt
+45
-39
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/Message.kt
....mamoe.mirai/network/protocol/tim/packet/event/Message.kt
+7
-1
mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
...rai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
+5
-0
No files found.
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
View file @
19ca01b4
...
@@ -9,6 +9,7 @@ import net.mamoe.mirai.Bot.ContactSystem
...
@@ -9,6 +9,7 @@ import net.mamoe.mirai.Bot.ContactSystem
import
net.mamoe.mirai.contact.*
import
net.mamoe.mirai.contact.*
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.packet.action.AddFriendPacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendPacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendPacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendResponse
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendResponse
import
net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult
import
net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult
...
@@ -66,7 +67,7 @@ class Bot(val account: BotAccount, val logger: MiraiLogger) {
...
@@ -66,7 +67,7 @@ class Bot(val account: BotAccount, val logger: MiraiLogger) {
instances
.
add
(
this
)
instances
.
add
(
this
)
}
}
override
fun
toString
():
String
=
"Bot
{qq=${account.id}}
"
override
fun
toString
():
String
=
"Bot
(${account.id})
"
/**
/**
* [关闭][BotNetworkHandler.close]网络处理器, 取消所有运行在 [BotNetworkHandler] 下的协程.
* [关闭][BotNetworkHandler.close]网络处理器, 取消所有运行在 [BotNetworkHandler] 下的协程.
...
@@ -158,19 +159,46 @@ class Bot(val account: BotAccount, val logger: MiraiLogger) {
...
@@ -158,19 +159,46 @@ class Bot(val account: BotAccount, val logger: MiraiLogger) {
}
}
}
}
suspend
fun
ContactSystem
.
canAddFriend
(
id
:
UInt
):
CanAddFriendResponse
=
@Suppress
(
"ClassName"
)
bot
.
withSession
{
sealed
class
AddFriendResult
{
CanAddFriendPacket
(
bot
.
qqAccount
,
id
,
bot
.
sessionKey
).
sendAndExpect
<
CanAddFriendResponse
>().
await
()
open
class
SUCCESS
internal
constructor
()
:
AddFriendResult
()
{
companion
object
:
SUCCESS
()
override
fun
toString
():
String
=
"AddFriendResult(Success)"
}
/**
* 对方拒绝添加好友
*/
object
REJECTED
:
AddFriendResult
()
{
override
fun
toString
():
String
=
"AddFriendResult(Rejected)"
}
}
/**
* 这个人已经是好友
*/
object
ALREADY_ADDED
:
SUCCESS
()
{
override
fun
toString
():
String
=
"AddFriendResult(AlreadyAdded)"
}
}
/**
/**
* 添加一个好友
* 添加一个好友
*
*
* @param lazyMessage 若需要验证请求时的验证消息.
* @param lazyMessage 若需要验证请求时的验证消息.
*/
*/
suspend
fun
ContactSystem
.
addFriend
(
id
:
UInt
,
lazyMessage
:
()
->
String
=
{
""
}):
Boolean
=
when
(
this
.
canAddFriend
(
id
))
{
suspend
fun
ContactSystem
.
addFriend
(
id
:
UInt
,
lazyMessage
:
()
->
String
=
{
""
}):
AddFriendResult
=
bot
.
withSession
{
is
CanAddFriendResponse
.
AlreadyAdded
->
false
when
(
CanAddFriendPacket
(
bot
.
qqAccount
,
id
,
bot
.
sessionKey
).
sendAndExpect
<
CanAddFriendResponse
>().
await
())
{
is
CanAddFriendResponse
.
Rejected
->
false
is
CanAddFriendResponse
.
AlreadyAdded
->
AddFriendResult
.
ALREADY_ADDED
is
CanAddFriendResponse
.
RequireVerification
->
TODO
()
is
CanAddFriendResponse
.
Rejected
->
AddFriendResult
.
REJECTED
is
CanAddFriendResponse
.
ReadyToAdd
->
TODO
()
is
CanAddFriendResponse
.
RequireVerification
->
{
TODO
()
}
is
CanAddFriendResponse
.
ReadyToAdd
->
{
AddFriendPacket
(
bot
.
qqAccount
,
id
,
bot
.
sessionKey
).
sendAndExpect
<
AddFriendPacket
.
AddFriendResponse
>().
await
()
TODO
()
}
}
}
}
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotHelper.kt
View file @
19ca01b4
...
@@ -6,7 +6,6 @@ import net.mamoe.mirai.contact.*
...
@@ -6,7 +6,6 @@ import net.mamoe.mirai.contact.*
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotSession
import
net.mamoe.mirai.network.BotSession
import
net.mamoe.mirai.network.protocol.tim.packet.OutgoingPacket
import
net.mamoe.mirai.network.protocol.tim.packet.OutgoingPacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendResponse
import
net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult
import
net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult
import
net.mamoe.mirai.network.session
import
net.mamoe.mirai.network.session
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.BotConfiguration
...
@@ -62,16 +61,11 @@ suspend inline fun Bot.login(noinline configuration: BotConfiguration.() -> Unit
...
@@ -62,16 +61,11 @@ suspend inline fun Bot.login(noinline configuration: BotConfiguration.() -> Unit
*/
*/
suspend
inline
fun
Bot
.
login
():
LoginResult
=
this
.
network
.
login
(
BotConfiguration
.
Default
)
suspend
inline
fun
Bot
.
login
():
LoginResult
=
this
.
network
.
login
(
BotConfiguration
.
Default
)
/**
* 得到可否添加这个人为好友
*/
suspend
inline
fun
Bot
.
canAddFriend
(
id
:
UInt
):
CanAddFriendResponse
=
this
.
contacts
.
canAddFriend
(
id
)
/**
/**
* 添加好友
* 添加好友
*/
*/
@JvmOverloads
@JvmOverloads
suspend
inline
fun
Bot
.
addFriend
(
id
:
UInt
,
noinline
lazyMessage
:
()
->
String
=
{
""
})
=
this
.
contacts
.
addFriend
(
id
,
lazyMessage
)
suspend
inline
fun
Bot
.
addFriend
(
id
:
UInt
,
noinline
lazyMessage
:
()
->
String
=
{
""
})
:
AddFriendResult
=
this
.
contacts
.
addFriend
(
id
,
lazyMessage
)
/**
/**
* 取得机器人的 QQ 号
* 取得机器人的 QQ 号
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/Subscribable.kt
View file @
19ca01b4
...
@@ -97,4 +97,12 @@ object EventScope : CoroutineScope {
...
@@ -97,4 +97,12 @@ object EventScope : CoroutineScope {
EventDispatcher
+
CoroutineExceptionHandler
{
_
,
e
->
EventDispatcher
+
CoroutineExceptionHandler
{
_
,
e
->
MiraiLogger
.
error
(
"An exception is thrown in EventScope"
,
e
)
MiraiLogger
.
error
(
"An exception is thrown in EventScope"
,
e
)
}
}
}
/**
* 可控制是否需要广播这个事件包
*/
interface
BroadcastControllable
:
Subscribable
{
val
shouldBroadcast
:
Boolean
get
()
=
true
}
}
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/TIMBotNetworkHandler.kt
View file @
19ca01b4
...
@@ -242,7 +242,7 @@ internal class TIMBotNetworkHandler internal constructor(override inline val bot
...
@@ -242,7 +242,7 @@ internal class TIMBotNetworkHandler internal constructor(override inline val bot
when
(
packet
)
{
when
(
packet
)
{
is
Cancellable
->
if
((
packet
as
Cancellable
).
broadcast
(
coroutineContext
).
cancelled
)
return
is
Cancellable
->
if
((
packet
as
Cancellable
).
broadcast
(
coroutineContext
).
cancelled
)
return
is
Subscribable
->
packet
.
broadcast
(
coroutineContext
)
is
Subscribable
->
if
((
packet
as
?
BroadcastControllable
)
?.
shouldBroadcast
!=
false
)
packet
.
broadcast
(
coroutineContext
)
}
}
// Remove first to release the lock
// Remove first to release the lock
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/action/AddContact.kt
View file @
19ca01b4
...
@@ -4,12 +4,12 @@ package net.mamoe.mirai.network.protocol.tim.packet.action
...
@@ -4,12 +4,12 @@ package net.mamoe.mirai.network.protocol.tim.packet.action
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.readUByte
import
kotlinx.io.core.readUInt
import
kotlinx.io.core.readUInt
import
kotlinx.io.core.readUShort
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendResponse.State
import
net.mamoe.mirai.network.protocol.tim.packet.event.EventPacket
import
net.mamoe.mirai.network.protocol.tim.packet.event.EventPacket
import
net.mamoe.mirai.utils.io.*
import
net.mamoe.mirai.utils.io.*
...
@@ -98,49 +98,55 @@ object CanAddFriendPacket : SessionPacketFactory<CanAddFriendResponse>() {
...
@@ -98,49 +98,55 @@ object CanAddFriendPacket : SessionPacketFactory<CanAddFriendResponse>() {
writeQQ
(
qq
)
writeQQ
(
qq
)
}
}
override
suspend
fun
ByteReadPacket
.
decode
(
id
:
PacketId
,
sequenceId
:
UShort
,
handler
:
BotNetworkHandler
<
*
>):
CanAddFriendResponse
=
override
suspend
fun
ByteReadPacket
.
decode
(
id
:
PacketId
,
sequenceId
:
UShort
,
handler
:
BotNetworkHandler
<
*
>):
CanAddFriendResponse
=
with
(
handler
.
bot
)
{
CanAddFriendResponse
().
apply
{
if
(
remaining
>
20
)
{
//todo check
if
(
remaining
>
20
)
{
//todo check
return
CanAddFriendResponse
.
AlreadyAdded
(
readUInt
().
qq
())
state
=
State
.
ALREADY_ADDED
}
return
@
apply
val
qq
:
QQ
=
readUInt
().
qq
()
}
qq
=
readUInt
()
state
=
when
(
val
state
=
readUShort
().
toUInt
())
{
return
when
(
val
state
=
readUByte
().
toUInt
())
{
0
x00u
->
State
.
NOT_REQUIRE_VERIFICATION
0
x00u
->
CanAddFriendResponse
.
ReadyToAdd
(
qq
)
0
x01u
->
State
.
REQUIRE_VERIFICATION
//需要验证信息
0
x01u
->
CanAddFriendResponse
.
RequireVerification
(
qq
)
0
x99u
->
State
.
ALREADY_ADDED
0
x99u
->
CanAddFriendResponse
.
AlreadyAdded
(
qq
)
0
x03u
,
0
x03u
,
0
x04u
->
State
.
FAILED
0
x04u
->
CanAddFriendResponse
.
Rejected
(
qq
)
else
->
throw
IllegalStateException
(
state
.
toString
())
else
->
error
(
state
.
toString
())
}
}
}
}
}
}
class
CanAddFriendResponse
:
EventPacket
{
sealed
class
CanAddFriendResponse
:
EventPacket
{
var
qq
:
UInt
=
0
u
abstract
val
qq
:
QQ
lateinit
var
state
:
State
/**
enum
class
State
{
* 已经添加
/**
*/
* 已经添加
data class
AlreadyAdded
(
*/
override
val
qq
:
QQ
ALREADY_ADDED
,
)
:
CanAddFriendResponse
()
/**
* 需要验证信息
/**
*/
* 需要验证信息
REQUIRE_VERIFICATION
,
*/
/**
data class
RequireVerification
(
* 不需要验证信息
override
val
qq
:
QQ
*/
)
:
CanAddFriendResponse
()
NOT_REQUIRE_VERIFICATION
,
/**
/**
* 对方拒绝添加
* 不需要验证信息
*/
*/
FAILED
,
data class
ReadyToAdd
(
}
override
val
qq
:
QQ
)
:
CanAddFriendResponse
()
/**
* 对方拒绝添加
*/
data class
Rejected
(
override
val
qq
:
QQ
)
:
CanAddFriendResponse
()
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/Message.kt
View file @
19ca01b4
...
@@ -10,6 +10,7 @@ import net.mamoe.mirai.contact.Contact
...
@@ -10,6 +10,7 @@ import net.mamoe.mirai.contact.Contact
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.event.BroadcastControllable
import
net.mamoe.mirai.event.events.BotEvent
import
net.mamoe.mirai.event.events.BotEvent
import
net.mamoe.mirai.getGroup
import
net.mamoe.mirai.getGroup
import
net.mamoe.mirai.getQQ
import
net.mamoe.mirai.getQQ
...
@@ -143,7 +144,12 @@ data class FriendMessage(
...
@@ -143,7 +144,12 @@ data class FriendMessage(
val
previous
:
Boolean
,
val
previous
:
Boolean
,
override
val
sender
:
QQ
,
override
val
sender
:
QQ
,
override
val
message
:
MessageChain
override
val
message
:
MessageChain
)
:
MessagePacket
<
QQ
>()
{
)
:
MessagePacket
<
QQ
>(),
BroadcastControllable
{
/**
* 是否应被自动广播. 此为内部 API
*/
override
val
shouldBroadcast
:
Boolean
get
()
=
!
previous
override
val
subject
:
QQ
get
()
=
sender
override
val
subject
:
QQ
get
()
=
sender
}
}
...
...
mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
View file @
19ca01b4
...
@@ -7,6 +7,7 @@ import kotlinx.coroutines.delay
...
@@ -7,6 +7,7 @@ import kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.launch
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.addFriend
import
net.mamoe.mirai.event.Subscribable
import
net.mamoe.mirai.event.Subscribable
import
net.mamoe.mirai.event.subscribeAlways
import
net.mamoe.mirai.event.subscribeAlways
import
net.mamoe.mirai.event.subscribeMessages
import
net.mamoe.mirai.event.subscribeMessages
...
@@ -69,6 +70,10 @@ suspend fun main() {
...
@@ -69,6 +70,10 @@ suspend fun main() {
}
}
}
}
startsWith
(
"添加好友"
,
removePrefix
=
true
)
{
reply
(
bot
.
addFriend
(
it
.
toUInt
()).
toString
())
}
}
}
bot
.
network
.
awaitDisconnection
()
//等到直到断开连接
bot
.
network
.
awaitDisconnection
()
//等到直到断开连接
...
...
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