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
0ea0bf23
Commit
0ea0bf23
authored
Oct 09, 2019
by
PeratX
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
5c18b413
b9720385
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
136 additions
and
114 deletions
+136
-114
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/Subscribers.kt
...e/src/jvmMain/kotlin/net/mamoe/mirai/event/Subscribers.kt
+21
-0
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/BotEvents.kt
.../jvmMain/kotlin/net/mamoe/mirai/event/events/BotEvents.kt
+11
-0
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/FriendEvents.kt
...mMain/kotlin/net/mamoe/mirai/event/events/FriendEvents.kt
+7
-5
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/GroupEvents.kt
...vmMain/kotlin/net/mamoe/mirai/event/events/GroupEvents.kt
+7
-5
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/PacketEvents.kt
...mMain/kotlin/net/mamoe/mirai/event/events/PacketEvents.kt
+36
-0
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/group/GroupEvent.kt
...n/kotlin/net/mamoe/mirai/event/events/group/GroupEvent.kt
+0
-10
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/network/PacketEvent.kt
...otlin/net/mamoe/mirai/event/events/network/PacketEvent.kt
+0
-10
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/network/ServerPacketEvents.kt
...et/mamoe/mirai/event/events/network/ServerPacketEvents.kt
+0
-12
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/qq/FriendEvent.kt
...ain/kotlin/net/mamoe/mirai/event/events/qq/FriendEvent.kt
+0
-10
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/internal/InternalEventListenres.kt
.../net/mamoe/mirai/event/internal/InternalEventListenres.kt
+26
-6
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
.../mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
+5
-5
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/handler/DataPacketSocket.kt
...oe/mirai/network/protocol/tim/handler/DataPacketSocket.kt
+2
-2
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/handler/MessagePacketHandler.kt
...irai/network/protocol/tim/handler/MessagePacketHandler.kt
+2
-2
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/ClientPacket.kt
...t/mamoe/mirai/network/protocol/tim/packet/ClientPacket.kt
+1
-1
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/ServerPacket.kt
...t/mamoe/mirai/network/protocol/tim/packet/ServerPacket.kt
+0
-29
mirai-debug/src/main/java/PacketDebuger.kt
mirai-debug/src/main/java/PacketDebuger.kt
+1
-1
mirai-demos/mirai-demo-1/src/main/java/demo1/Main.kt
mirai-demos/mirai-demo-1/src/main/java/demo1/Main.kt
+17
-16
No files found.
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/Subscribers.kt
View file @
0ea0bf23
...
...
@@ -10,6 +10,8 @@ enum class ListeningStatus {
STOPPED
}
/* KClass 的扩展方法 */
@Synchronized
fun
<
E
:
Event
>
KClass
<
E
>.
subscribe
(
handler
:
suspend
(
E
)
->
ListeningStatus
)
=
this
.
listeners
.
add
(
Handler
(
handler
))
...
...
@@ -28,6 +30,25 @@ fun <E : Event> KClass<E>.subscribeWhileFalse(listener: suspend (E) -> Boolean)
fun
<
E
:
Event
>
KClass
<
E
>.
subscribeWhileTrue
(
listener
:
suspend
(
E
)
->
Boolean
)
=
subscribeWhile
(
true
,
listener
)
fun
<
E
:
Event
>
KClass
<
E
>.
subscribeWhileNull
(
listener
:
suspend
(
E
)
->
Any
?)
=
subscribeWhile
(
null
,
listener
)
/* 顶层方法 */
inline
fun
<
reified
E
:
Event
>
subscribe
(
noinline
handler
:
suspend
(
E
)
->
ListeningStatus
)
=
E
::
class
.
subscribe
(
handler
)
inline
fun
<
reified
E
:
Event
>
subscribeAlways
(
noinline
listener
:
suspend
(
E
)
->
Unit
)
=
E
::
class
.
subscribeAlways
(
listener
)
inline
fun
<
reified
E
:
Event
>
subscribeOnce
(
noinline
listener
:
suspend
(
E
)
->
Unit
)
=
E
::
class
.
subscribeOnce
(
listener
)
inline
fun
<
reified
E
:
Event
,
T
>
subscribeUntil
(
valueIfStop
:
T
,
noinline
listener
:
suspend
(
E
)
->
T
)
=
E
::
class
.
subscribeUntil
(
valueIfStop
,
listener
)
inline
fun
<
reified
E
:
Event
>
subscribeUntilFalse
(
noinline
listener
:
suspend
(
E
)
->
Boolean
)
=
E
::
class
.
subscribeUntilFalse
(
listener
)
inline
fun
<
reified
E
:
Event
>
subscribeUntilTrue
(
noinline
listener
:
suspend
(
E
)
->
Boolean
)
=
E
::
class
.
subscribeUntilTrue
(
listener
)
inline
fun
<
reified
E
:
Event
>
subscribeUntilNull
(
noinline
listener
:
suspend
(
E
)
->
Any
?)
=
E
::
class
.
subscribeUntilNull
(
listener
)
inline
fun
<
reified
E
:
Event
,
T
>
subscribeWhile
(
valueIfContinue
:
T
,
noinline
listener
:
suspend
(
E
)
->
T
)
=
E
::
class
.
subscribeWhile
(
valueIfContinue
,
listener
)
inline
fun
<
reified
E
:
Event
>
subscribeWhileFalse
(
noinline
listener
:
suspend
(
E
)
->
Boolean
)
=
E
::
class
.
subscribeWhileFalse
(
listener
)
inline
fun
<
reified
E
:
Event
>
subscribeWhileTrue
(
noinline
listener
:
suspend
(
E
)
->
Boolean
)
=
E
::
class
.
subscribeWhileTrue
(
listener
)
inline
fun
<
reified
E
:
Event
>
subscribeWhileNull
(
noinline
listener
:
suspend
(
E
)
->
Any
?)
=
E
::
class
.
subscribeWhileNull
(
listener
)
/**
* 监听一个事件. 可同时进行多种方式的监听
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/
bot/BotEvent
.kt
→
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/
BotEvents
.kt
View file @
0ea0bf23
package
net.mamoe.mirai.event.events
.bot
package
net.mamoe.mirai.event.events
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.Event
import
kotlin.reflect.KClass
/**
* @author Him188moe
*/
abstract
class
BotEvent
(
val
bot
:
Bot
)
:
Event
()
class
BotLoginSucceedEvent
(
bot
:
Bot
)
:
BotEvent
(
bot
)
{
companion
object
:
KClass
<
BotLoginSucceedEvent
>
by
BotLoginSucceedEvent
::
class
}
\ No newline at end of file
class
BotLoginSucceedEvent
(
bot
:
Bot
)
:
BotEvent
(
bot
)
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/
qq/FriendMessageEvent
.kt
→
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/
FriendEvents
.kt
View file @
0ea0bf23
package
net.mamoe.mirai.event.events
.qq
package
net.mamoe.mirai.event.events
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.message.Message
import
net.mamoe.mirai.message.defaults.MessageChain
import
kotlin.reflect.KClass
/**
* @author Him188moe
*/
abstract
class
FriendEvent
(
bot
:
Bot
,
val
sender
:
QQ
)
:
BotEvent
(
bot
)
/**
* 接受好友消息事件
...
...
@@ -12,8 +16,6 @@ import kotlin.reflect.KClass
* @author Him188moe
*/
class
FriendMessageEvent
(
bot
:
Bot
,
sender
:
QQ
,
val
message
:
MessageChain
)
:
FriendEvent
(
bot
,
sender
)
{
companion
object
:
KClass
<
FriendMessageEvent
>
by
FriendMessageEvent
::
class
@JvmSynthetic
suspend
inline
fun
reply
(
message
:
Message
)
=
sender
.
sendMessage
(
message
)
...
...
@@ -25,4 +27,4 @@ class FriendMessageEvent(bot: Bot, sender: QQ, val message: MessageChain) : Frie
@JvmSynthetic
suspend
inline
fun
reply
(
message
:
MessageChain
)
=
sender
.
sendMessage
(
message
)
//shortcut
}
}
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/
group/GroupMessageEvent
.kt
→
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/
GroupEvents
.kt
View file @
0ea0bf23
package
net.mamoe.mirai.event.events
.group
package
net.mamoe.mirai.event.events
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.message.Message
import
net.mamoe.mirai.message.defaults.MessageChain
import
kotlin.reflect.KClass
/**
* @author Him188moe
*/
class
GroupMessageEvent
(
bot
:
Bot
,
group
:
Group
,
val
sender
:
QQ
,
val
message
:
MessageChain
)
:
GroupEvent
(
bot
,
group
)
{
companion
object
:
KClass
<
GroupMessageEvent
>
by
GroupMessageEvent
::
class
abstract
class
GroupEvent
(
bot
:
Bot
,
val
group
:
Group
)
:
BotEvent
(
bot
)
/**
* @author Him188moe
*/
class
GroupMessageEvent
(
bot
:
Bot
,
group
:
Group
,
val
sender
:
QQ
,
val
message
:
MessageChain
)
:
GroupEvent
(
bot
,
group
)
{
@JvmSynthetic
suspend
inline
fun
reply
(
message
:
Message
)
=
group
.
sendMessage
(
message
)
...
...
@@ -24,4 +26,4 @@ class GroupMessageEvent(bot: Bot, group: Group, val sender: QQ, val message: Mes
@JvmSynthetic
suspend
inline
fun
reply
(
message
:
MessageChain
)
=
group
.
sendMessage
(
message
)
}
}
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/
network/Client
PacketEvents.kt
→
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/PacketEvents.kt
View file @
0ea0bf23
package
net.mamoe.mirai.event.events
.network
package
net.mamoe.mirai.event.events
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.Cancellable
import
net.mamoe.mirai.network.protocol.tim.packet.ClientPacket
import
kotlin.reflect.KClass
import
net.mamoe.mirai.network.protocol.tim.packet.Packet
import
net.mamoe.mirai.network.protocol.tim.packet.ServerPacket
abstract
class
ClientPacketEvent
<
out
P
:
ClientPacket
>(
bot
:
Bot
,
packet
:
P
)
:
PacketEvent
<
P
>(
bot
,
packet
)
/* Abstract */
/**
* @author Him188moe
*/
sealed
class
PacketEvent
<
out
P
:
Packet
>(
bot
:
Bot
,
open
val
packet
:
P
)
:
BotEvent
(
bot
)
/* Client to Server */
sealed
class
ClientPacketEvent
<
out
P
:
ClientPacket
>(
bot
:
Bot
,
packet
:
P
)
:
PacketEvent
<
P
>(
bot
,
packet
)
/**
* 包已发送. 不可被取消
*/
class
PacketSentEvent
<
P
:
ClientPacket
>(
bot
:
Bot
,
packet
:
P
)
:
ClientPacketEvent
<
P
>(
bot
,
packet
)
{
companion
object
:
KClass
<
PacketSentEvent
<
*
>>
by
PacketSentEvent
::
class
}
class
PacketSentEvent
<
P
:
ClientPacket
>(
bot
:
Bot
,
packet
:
P
)
:
ClientPacketEvent
<
P
>(
bot
,
packet
)
/**
* 包发送前. 可被取消
*/
class
BeforePacketSendEvent
<
P
:
ClientPacket
>(
bot
:
Bot
,
packet
:
P
)
:
ClientPacketEvent
<
P
>(
bot
,
packet
),
Cancellable
{
companion
object
:
KClass
<
BeforePacketSendEvent
<
*
>>
by
BeforePacketSendEvent
::
class
}
\ No newline at end of file
class
BeforePacketSendEvent
<
P
:
ClientPacket
>(
bot
:
Bot
,
packet
:
P
)
:
ClientPacketEvent
<
P
>(
bot
,
packet
),
Cancellable
/* Server to Client */
sealed
class
ServerPacketEvent
<
out
P
:
ServerPacket
>(
bot
:
Bot
,
packet
:
P
)
:
PacketEvent
<
P
>(
bot
,
packet
)
class
ServerPacketReceivedEvent
(
bot
:
Bot
,
packet
:
ServerPacket
)
:
ServerPacketEvent
<
ServerPacket
>(
bot
,
packet
)
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/group/GroupEvent.kt
deleted
100644 → 0
View file @
5c18b413
package
net.mamoe.mirai.event.events.group
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.event.events.bot.BotEvent
/**
* @author Him188moe
*/
abstract
class
GroupEvent
(
bot
:
Bot
,
val
group
:
Group
)
:
BotEvent
(
bot
)
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/network/PacketEvent.kt
deleted
100644 → 0
View file @
5c18b413
package
net.mamoe.mirai.event.events.network
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.events.bot.BotEvent
import
net.mamoe.mirai.network.protocol.tim.packet.Packet
/**
* @author Him188moe
*/
abstract
class
PacketEvent
<
out
P
:
Packet
>(
bot
:
Bot
,
open
val
packet
:
P
)
:
BotEvent
(
bot
)
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/network/ServerPacketEvents.kt
deleted
100644 → 0
View file @
5c18b413
package
net.mamoe.mirai.event.events.network
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.network.protocol.tim.packet.ServerPacket
import
kotlin.reflect.KClass
abstract
class
ServerPacketEvent
<
out
P
:
ServerPacket
>(
bot
:
Bot
,
packet
:
P
)
:
PacketEvent
<
P
>(
bot
,
packet
)
class
ServerPacketReceivedEvent
(
bot
:
Bot
,
packet
:
ServerPacket
)
:
ServerPacketEvent
<
ServerPacket
>(
bot
,
packet
)
{
companion
object
:
KClass
<
ServerPacketReceivedEvent
>
by
ServerPacketReceivedEvent
::
class
}
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/events/qq/FriendEvent.kt
deleted
100644 → 0
View file @
5c18b413
package
net.mamoe.mirai.event.events.qq
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.event.events.bot.BotEvent
/**
* @author Him188moe
*/
abstract
class
FriendEvent
(
bot
:
Bot
,
val
sender
:
QQ
)
:
BotEvent
(
bot
)
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/event/internal/InternalEventListenres.kt
View file @
0ea0bf23
package
net.mamoe.mirai.event.internal
import
kotlinx.coroutines.delay
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.Event
import
net.mamoe.mirai.event.ListeningStatus
import
net.mamoe.mirai.event.broadcast
import
net.mamoe.mirai.event.events.ServerPacketReceivedEvent
import
net.mamoe.mirai.event.subscribeAlways
import
net.mamoe.mirai.network.protocol.tim.packet.ServerPacket
import
net.mamoe.mirai.network.protocol.tim.packet.dataInputStream
import
net.mamoe.mirai.utils.BotAccount
import
net.mamoe.mirai.utils.Console
import
kotlin.reflect.KClass
import
kotlin.reflect.full.allSuperclasses
...
...
@@ -10,7 +19,6 @@ import kotlin.reflect.full.allSuperclasses
*
* @author Him188moe
*/
internal
fun
<
E
:
Event
>
KClass
<
E
>.
subscribeInternal
(
listener
:
Listener
<
E
>)
=
this
.
listeners
.
add
(
listener
)
/**
...
...
@@ -36,16 +44,16 @@ internal val <E : Event> KClass<E>.listeners: EventListeners<E> get() = EventLis
internal
class
EventListeners
<
E
:
Event
>
:
MutableList
<
Listener
<
E
>>
by
mutableListOf
()
internal
object
EventListenerManger
{
private
val
REGISTRIES
:
MutableMap
<
KClass
<
out
Event
>,
EventListeners
<
out
Event
>>
=
mutableMapOf
()
private
val
registries
:
MutableMap
<
KClass
<
out
Event
>,
EventListeners
<
out
Event
>>
=
mutableMapOf
()
@Suppress
(
"UNCHECKED_CAST"
)
internal
fun
<
E
:
Event
>
get
(
clazz
:
KClass
<
E
>):
EventListeners
<
E
>
{
synchronized
(
clazz
)
{
if
(
REGISTRIES
.
containsKey
(
clazz
))
{
return
REGISTRIES
[
clazz
]
as
EventListeners
<
E
>
if
(
registries
.
containsKey
(
clazz
))
{
return
registries
[
clazz
]
as
EventListeners
<
E
>
}
else
{
EventListeners
<
E
>().
let
{
REGISTRIES
[
clazz
]
=
it
registries
[
clazz
]
=
it
return
it
}
}
...
...
@@ -64,13 +72,25 @@ internal suspend fun <E : Event> E.broadcastInternal(): E {
}
}
callListeners
(
this
::
class
.
listeners
as
EventListeners
<
E
>)
callListeners
(
this
::
class
.
listeners
as
EventListeners
<
in
E
>)
this
::
class
.
allSuperclasses
.
forEach
{
//println("super: " + it.simpleName)
//todo multi platform
if
(
Event
::
class
.
java
.
isAssignableFrom
(
it
.
java
))
{
callListeners
((
it
as
KClass
<
out
Event
>).
listeners
as
EventListeners
<
in
E
>)
}
}
return
this
}
suspend
fun
main
()
{
ServerPacketReceivedEvent
::
class
.
subscribeAlways
{
println
(
"got it"
)
}
println
(
ServerPacketReceivedEvent
::
class
.
listeners
.
size
)
ServerPacketReceivedEvent
(
Bot
(
BotAccount
(
1
,
""
),
Console
()),
object
:
ServerPacket
(
byteArrayOf
().
dataInputStream
())
{}).
broadcast
()
delay
(
1000
)
}
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
View file @
0ea0bf23
...
...
@@ -6,10 +6,10 @@ import kotlinx.coroutines.sync.withLock
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.ListeningStatus
import
net.mamoe.mirai.event.broadcast
import
net.mamoe.mirai.event.events.
bot.BotLoginSuccee
dEvent
import
net.mamoe.mirai.event.events.
network.BeforePacketSen
dEvent
import
net.mamoe.mirai.event.events.
network.
PacketSentEvent
import
net.mamoe.mirai.event.events.
network.
ServerPacketReceivedEvent
import
net.mamoe.mirai.event.events.
BeforePacketSen
dEvent
import
net.mamoe.mirai.event.events.
BotLoginSuccee
dEvent
import
net.mamoe.mirai.event.events.PacketSentEvent
import
net.mamoe.mirai.event.events.ServerPacketReceivedEvent
import
net.mamoe.mirai.event.subscribe
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.LoginSession
...
...
@@ -188,7 +188,7 @@ internal class TIMBotNetworkHandler(private val bot: Bot) : BotNetworkHandler {
// loginResult?.complete(LoginState.TIMEOUT)
//}
val
received
=
AtomicBoolean
(
false
)
ServerPacketReceivedEvent
.
subscribe
{
ServerPacketReceivedEvent
::
class
.
subscribe
{
if
(
it
.
packet
is
ServerTouchResponsePacket
&&
it
.
bot
===
bot
)
{
received
.
set
(
true
)
ListeningStatus
.
STOPPED
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/handler/DataPacketSocket.kt
View file @
0ea0bf23
package
net.mamoe.mirai.network.protocol.tim.handler
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.events.network.ServerPacketReceivedEvent
import
net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler
import
net.mamoe.mirai.event.events.ServerPacketReceivedEvent
import
net.mamoe.mirai.network.LoginSession
import
net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.packet.ClientPacket
import
net.mamoe.mirai.network.protocol.tim.packet.ServerPacket
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/handler/MessagePacketHandler.kt
View file @
0ea0bf23
...
...
@@ -3,8 +3,8 @@ package net.mamoe.mirai.network.protocol.tim.handler
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.event.broadcast
import
net.mamoe.mirai.event.events.
group.Group
MessageEvent
import
net.mamoe.mirai.event.events.
qq.Friend
MessageEvent
import
net.mamoe.mirai.event.events.
Friend
MessageEvent
import
net.mamoe.mirai.event.events.
Group
MessageEvent
import
net.mamoe.mirai.getGroupByNumber
import
net.mamoe.mirai.getQQ
import
net.mamoe.mirai.message.defaults.MessageChain
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/ClientPacket.kt
View file @
0ea0bf23
...
...
@@ -41,7 +41,7 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
* Encode this packet.
*
*
* Before sending the packet, a [tail][TIMProtocol.tail]
will be
added.
* Before sending the packet, a [tail][TIMProtocol.tail]
is
added.
*/
@Throws
(
IOException
::
class
)
protected
abstract
fun
encode
()
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/ServerPacket.kt
View file @
0ea0bf23
...
...
@@ -2,13 +2,6 @@
package
net.mamoe.mirai.network.protocol.tim.packet
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.GlobalScope
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.events.network.ServerPacketReceivedEvent
import
net.mamoe.mirai.event.subscribeWhileTrue
import
net.mamoe.mirai.network.protocol.tim.packet.PacketNameFormatter.adjustName
import
net.mamoe.mirai.network.protocol.tim.packet.action.ServerCanAddFriendResponsePacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.ServerSendFriendMessageResponsePacket
...
...
@@ -18,7 +11,6 @@ import net.mamoe.mirai.network.protocol.tim.packet.login.*
import
net.mamoe.mirai.utils.*
import
java.io.DataInputStream
import
java.io.EOFException
import
kotlin.reflect.KClass
/**
* @author Him188moe
...
...
@@ -334,25 +326,4 @@ fun DataInputStream.gotoWhere(matcher: ByteArray): DataInputStream {
return
this
}
}
while
(
true
)
}
@Suppress
(
"UNCHECKED_CAST"
)
internal
fun
<
P
:
ServerPacket
>
Bot
.
waitForPacket
(
packetClass
:
KClass
<
P
>,
timeoutMillis
:
Long
=
Long
.
MAX_VALUE
,
timeout
:
()
->
Unit
=
{})
{
var
got
=
false
ServerPacketReceivedEvent
.
subscribeWhileTrue
{
if
(
packetClass
.
isInstance
(
it
.
packet
)
&&
it
.
bot
===
this
)
{
got
=
true
false
}
else
{
true
}
}
GlobalScope
.
launch
(
Dispatchers
.
Unconfined
)
{
delay
(
timeoutMillis
)
if
(!
got
)
{
timeout
.
invoke
()
}
}
}
\ No newline at end of file
mirai-debug/src/main/java/PacketDebuger.kt
View file @
0ea0bf23
...
...
@@ -85,7 +85,7 @@ object Main {
* 4. 双击跳转
* 5. 断点并在TIM发送消息以触发
* 6. 运行到 `mov eax,dword ptr ss:[ebp+10]`
* 7.
从 eax 开始的 16个
bytes 便是 `sessionKey`
* 7.
查看内存, 从 `eax` 开始的 16
bytes 便是 `sessionKey`
*/
val
sessionKey
:
ByteArray
=
"48 C0 11 42 2D FD 8F 36 6E BA BF FD D3 AA B7 AE"
.
hexToBytes
()
...
...
mirai-demos/mirai-demo-1/src/main/java/demo1/Main.kt
View file @
0ea0bf23
...
...
@@ -2,8 +2,8 @@ package demo1
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.event.events.
group.Group
MessageEvent
import
net.mamoe.mirai.event.events.
qq.Friend
MessageEvent
import
net.mamoe.mirai.event.events.
Friend
MessageEvent
import
net.mamoe.mirai.event.events.
Group
MessageEvent
import
net.mamoe.mirai.event.subscribeAll
import
net.mamoe.mirai.event.subscribeAlways
import
net.mamoe.mirai.event.subscribeUntilFalse
...
...
@@ -33,18 +33,8 @@ suspend fun main() {
}
//DSL 监听
FriendMessageEvent
.
subscribeAll
{
always
{
//获取第一个纯文本消息
val
firstText
=
it
.
message
[
PlainText
]
}
}
//监听事件:
FriendMessageEvent
.
subscribeAlways
{
//提供泛型以监听事件
subscribeAlways
<
FriendMessageEvent
>
{
//获取第一个纯文本消息
val
firstText
=
it
.
message
[
PlainText
]
...
...
@@ -76,11 +66,22 @@ suspend fun main() {
}
}
//通过 KClass 扩展方式监听事件
GroupMessageEvent
::
class
.
subscribeAlways
{
when
{
it
.
message
.
contains
(
"复读"
)
->
it
.
reply
(
it
.
message
)
}
}
//DSL 监听
FriendMessageEvent
::
class
.
subscribeAll
{
always
{
//获取第一个纯文本消息
val
firstText
=
it
.
message
[
PlainText
]
}
}
}
...
...
@@ -90,9 +91,9 @@ suspend fun main() {
* 对机器人说 "停止", 机器人停止
*/
fun
demo2
()
{
FriendMessageEvent
.
subscribeAlways
{
event
->
subscribeAlways
<
FriendMessageEvent
>
{
event
->
if
(
event
.
message
eq
"记笔记"
)
{
FriendMessageEvent
.
subscribeUntilFalse
{
FriendMessageEvent
::
class
.
subscribeUntilFalse
{
it
.
reply
(
"你发送了 ${it.message}"
)
it
.
message
eq
"停止"
...
...
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