This commit is contained in:
Him188 2019-10-10 11:28:25 +08:00
parent 00d8e26850
commit 4d09010cf0
6 changed files with 17 additions and 16 deletions

View File

@ -8,9 +8,6 @@ import net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler
import net.mamoe.mirai.utils.BotAccount import net.mamoe.mirai.utils.BotAccount
import net.mamoe.mirai.utils.ContactList import net.mamoe.mirai.utils.ContactList
import net.mamoe.mirai.utils.MiraiLogger import net.mamoe.mirai.utils.MiraiLogger
import java.io.Closeable
import java.util.*
import java.util.concurrent.atomic.AtomicInteger
/** /**
* Mirai 的机器人. 一个机器人实例登录一个 QQ 账号. * Mirai 的机器人. 一个机器人实例登录一个 QQ 账号.
@ -40,9 +37,8 @@ import java.util.concurrent.atomic.AtomicInteger
* @author NatrualHG * @author NatrualHG
* @see net.mamoe.mirai.contact.Contact * @see net.mamoe.mirai.contact.Contact
*/ */
class Bot(val account: BotAccount, val logger: MiraiLogger) : Closeable { class Bot(val account: BotAccount, val logger: MiraiLogger) {
val id = nextId()
val id = createdBotsCount.getAndAdd(1)
val contacts = ContactSystem() val contacts = ContactSystem()
@ -88,7 +84,7 @@ class Bot(val account: BotAccount, val logger: MiraiLogger) : Closeable {
} }
} }
override fun close() { fun close() {
this.network.close() this.network.close()
this.contacts.groups.values.forEach { it.close() } this.contacts.groups.values.forEach { it.close() }
this.contacts.groups.clear() this.contacts.groups.clear()
@ -96,8 +92,10 @@ class Bot(val account: BotAccount, val logger: MiraiLogger) : Closeable {
} }
companion object { companion object {
val instances: MutableList<Bot> = Collections.synchronizedList(LinkedList()) val instances: MutableList<Bot> = mutableListOf()
private val createdBotsCount = AtomicInteger(0) private var id = 0
private val idLock = Any()
fun nextId(): Int = synchronized(idLock) { id++ }
} }
} }

View File

@ -58,7 +58,7 @@ fun Bot.green(o: Any?) = print(this, o.toString(), LoggerTextFormat.GREEN)
fun Bot.debug(o: Any?) = print(this, o.toString(), LoggerTextFormat.YELLOW) fun Bot.debug(o: Any?) = print(this, o.toString(), LoggerTextFormat.YELLOW)
fun Bot.debugPacket(packet: ServerPacket) { fun Bot.printPacketDebugging(packet: ServerPacket) {
debug("Packet=$packet") debug("Packet=$packet")
debug("Packet size=" + packet.input.goto(0).readAllBytes().size) debug("Packet size=" + packet.input.goto(0).readAllBytes().size)
debug("Packet data=" + packet.input.goto(0).readAllBytes().toUHexString()) debug("Packet data=" + packet.input.goto(0).readAllBytes().toUHexString())

View File

@ -26,8 +26,8 @@ abstract class Contact internal constructor(val bot: Bot, val number: Long) {
return sendMessage(message.toChain()) return sendMessage(message.toChain())
} }
suspend fun sendMessage(message: String) { suspend fun sendMessage(plain: String) {
this.sendMessage(PlainText(message)) this.sendMessage(PlainText(plain))
} }
suspend fun sendMessage(message: List<Message>) { suspend fun sendMessage(message: List<Message>) {

View File

@ -42,6 +42,9 @@ class ClientPasswordSubmissionPacket(
} }
} }
//实际上这些包性质都是一样的. 31 04 仅是一个序列 id, 可随机
//但为简化处理, 特固定这个 id
@PacketId("08 36 31 04") @PacketId("08 36 31 04")
class ClientLoginResendPacket3104(qq: Long, password: String, loginTime: Int, loginIP: String, privateKey: ByteArray, token0825: ByteArray, token00BA: ByteArray, tlv0006: ByteArray? = null) class ClientLoginResendPacket3104(qq: Long, password: String, loginTime: Int, loginIP: String, privateKey: ByteArray, token0825: ByteArray, token00BA: ByteArray, tlv0006: ByteArray? = null)
: ClientLoginResendPacket(qq, password, loginTime, loginIP, privateKey, token0825, token00BA, tlv0006) : ClientLoginResendPacket(qq, password, loginTime, loginIP, privateKey, token0825, token00BA, tlv0006)

View File

@ -19,14 +19,14 @@ class ServerLoginResponseKeyExchangePacket(input: DataInputStream, val flag: Fla
OTHER, OTHER,
} }
lateinit var tlv0006: ByteArray;//120bytes lateinit var tlv0006: ByteArray//120bytes
var tokenUnknown: ByteArray? = null var tokenUnknown: ByteArray? = null
lateinit var privateKey: ByteArray//16bytes lateinit var privateKeyUpdate: ByteArray//16bytes
@Tested @Tested
override fun decode() { override fun decode() {
this.input.skip(5) this.input.skip(5)
privateKey = this.input.readNBytes(16)//22 privateKeyUpdate = this.input.readNBytes(16)//22
//this.input.skip(2)//25 //this.input.skip(2)//25
this.input.goto(25) this.input.goto(25)
tlv0006 = this.input.readNBytes(120) tlv0006 = this.input.readNBytes(120)

View File

@ -5,5 +5,5 @@ package net.mamoe.mirai.utils
*/ */
data class BotAccount( data class BotAccount(
val qqNumber: Long,//实际上是 UInt val qqNumber: Long,//实际上是 UInt
val password: String val password: String//todo 不保存 password?
) )