Commit 1922fdc5 authored by Him188's avatar Him188

Merge remote-tracking branch 'origin/master'

parents 2232d51a 35742632
...@@ -61,6 +61,7 @@ internal class QQImpl(bot: QQAndroidBot, override val coroutineContext: Coroutin ...@@ -61,6 +61,7 @@ internal class QQImpl(bot: QQAndroidBot, override val coroutineContext: Coroutin
internal class MemberImpl( internal class MemberImpl(
qq: QQImpl, qq: QQImpl,
override var groupCard: String,
group: GroupImpl, group: GroupImpl,
override val coroutineContext: CoroutineContext, override val coroutineContext: CoroutineContext,
override val permission: MemberPermission override val permission: MemberPermission
......
...@@ -174,12 +174,13 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -174,12 +174,13 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
group.owner = group.owner =
MemberImpl( MemberImpl(
qq = bot.QQ(it.dwGroupOwnerUin) as QQImpl, qq = bot.QQ(it.dwGroupOwnerUin) as QQImpl,
groupCard = "",//unknown now
group = group, group = group,
coroutineContext = group.coroutineContext, coroutineContext = group.coroutineContext,
permission = MemberPermission.OWNER permission = MemberPermission.OWNER
) )
if (it.dwGroupOwnerUin == bot.uin) { if (it.dwGroupOwnerUin == bot.uin) {
group.botPermission == MemberPermission.OWNER group.botPermission = MemberPermission.OWNER
} }
toGet[group] = contactList toGet[group] = contactList
bot.groups.delegate.addLast(group) bot.groups.delegate.addLast(group)
...@@ -189,9 +190,9 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -189,9 +190,9 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
launch { launch {
try { try {
getTroopMemberList(it.key, it.value, it.key.owner.id) getTroopMemberList(it.key, it.value, it.key.owner.id)
groupInfo[it.key.uin] = it.value.size groupInfo[it.key.id] = it.value.size
} catch (e: Exception) { } catch (e: Exception) {
groupInfo[it.key.uin] = -1 groupInfo[it.key.id] = -1
bot.logger.info("群${it.key.uin}的列表拉取失败, 将采用动态加入") bot.logger.info("群${it.key.uin}的列表拉取失败, 将采用动态加入")
} }
} }
...@@ -206,25 +207,30 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -206,25 +207,30 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
} }
//===log===// //===log===//
fun fillUntil9(long: Number): String { fun fillUntil(long: Number, size: Int): String {
val x = long.toString() val x = long.toString()
return " ".repeat( return x + " ".repeat(
if (9 - x.length > 0) { if (size - x.length > 0) {
9 - x.length size - x.length
} else { } else {
0 0
} }
) + x )
} }
bot.logger.info("====================Mirai Bot List初始化完毕====================") bot.logger.info("====================Mirai Bot List初始化完毕====================")
bot.logger.info("好友数量: ${fillUntil9(bot.qqs.size)}\t\t\t 加载时间: ${friendLoadFinish - startTime}ms") bot.logger.info("好友数量: ${fillUntil(bot.qqs.size, 9)}\t\t\t 加载时间: ${friendLoadFinish - startTime}ms")
bot.logger.info("加入群组: ${fillUntil9(bot.groups.size)}\t\t\t 加载时间: ${currentTimeMillis - friendLoadFinish}ms") bot.logger.info("加入群组: ${fillUntil(bot.groups.size, 9)}\t\t\t 加载时间: ${currentTimeMillis - friendLoadFinish}ms")
groupInfo.forEach { groupInfo.forEach {
if (it.value == -1) { if (it.value == -1) {
bot.logger.error("群组号码: ${fillUntil9(it.key)}\t 成员数量加载失败") bot.logger.error("群组号码: ${fillUntil(it.key, 9)}\t 成员数量加载失败")
} else { } else {
bot.logger.info("群组号码: ${fillUntil9(it.key)}\t 成员数量: ${it.value}\t BOT权限: " + bot.groups[it.key].botPermission.toString() + "") bot.logger.info(
"群组号码: ${fillUntil(it.key, 9)}\t 成员数量: ${fillUntil(
it.value,
4
)}\t BOT权限: " + bot.groups[it.key].botPermission.toString() + ""
)
} }
} }
bot.logger.info("====================Mirai Bot List初始化完毕====================") bot.logger.info("====================Mirai Bot List初始化完毕====================")
...@@ -248,19 +254,21 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -248,19 +254,21 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
list.delegate.addLast( list.delegate.addLast(
MemberImpl( MemberImpl(
qq = bot.QQ(it.memberUin) as QQImpl, qq = bot.QQ(it.memberUin) as QQImpl,
groupCard = it.sShowName ?: it.sName ?: it.nick,
group = group, group = group,
coroutineContext = group.coroutineContext, coroutineContext = group.coroutineContext,
permission = when { permission = when {
it.memberUin == owner -> MemberPermission.OWNER it.memberUin == owner -> MemberPermission.OWNER
it.dwFlag == 1L -> MemberPermission.ADMINISTRATOR.apply { it.dwFlag == 1L -> MemberPermission.ADMINISTRATOR
if (it.memberUin == bot.uin) {
group.botPermission = MemberPermission.ADMINISTRATOR
}
}
else -> MemberPermission.MEMBER else -> MemberPermission.MEMBER
} }
) )
) )
} else {
group.owner.groupCard = it.sShowName ?: it.sName ?: it.nick
if (it.dwFlag == 1L) {
group.botPermission = MemberPermission.ADMINISTRATOR
}
} }
} }
size += data.members.size size += data.members.size
......
...@@ -8,6 +8,7 @@ import net.mamoe.mirai.qqandroid.QQAndroidBot ...@@ -8,6 +8,7 @@ import net.mamoe.mirai.qqandroid.QQAndroidBot
import net.mamoe.mirai.qqandroid.io.serialization.writeProtoBuf import net.mamoe.mirai.qqandroid.io.serialization.writeProtoBuf
import net.mamoe.mirai.qqandroid.network.QQAndroidClient import net.mamoe.mirai.qqandroid.network.QQAndroidClient
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.OidbSso import net.mamoe.mirai.qqandroid.network.protocol.data.proto.OidbSso
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.OutgoingPacket
import net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacketFactory 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.buildOutgoingUniPacket
...@@ -47,14 +48,34 @@ internal object TroopManagement { ...@@ -47,14 +48,34 @@ internal object TroopManagement {
) )
} }
} }
object Response : Packet object Response : Packet
} }
internal object MuteAll : OutgoingPacketFactory<LoginPacket.LoginPacketResponse>("OidbSvc.0x89a_0") { internal object MuteAll : OutgoingPacketFactory<MuteAll.Response>("OidbSvc.0x89a_0") {
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): LoginPacket.LoginPacketResponse { override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates. return Response
}
operator fun invoke(
client: QQAndroidClient,
groupCode: Long
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 2202,
serviceType = 0,
result = 0,
bodybuffer = EMPTY_BYTE_ARRAY//TODO
)
)
}
} }
object Response : Packet
} }
internal object EditNametag : OutgoingPacketFactory<LoginPacket.LoginPacketResponse>("OidbSvc.0x8fc_2") { internal object EditNametag : OutgoingPacketFactory<LoginPacket.LoginPacketResponse>("OidbSvc.0x8fc_2") {
......
...@@ -21,6 +21,11 @@ interface Member : QQ, Contact { ...@@ -21,6 +21,11 @@ interface Member : QQ, Contact {
*/ */
val permission: MemberPermission val permission: MemberPermission
/**
*
*/
var groupCard: String
/** /**
* 禁言 * 禁言
* *
...@@ -37,6 +42,7 @@ interface Member : QQ, Contact { ...@@ -37,6 +42,7 @@ interface Member : QQ, Contact {
* 解除禁言 * 解除禁言
*/ */
suspend fun unmute(): Boolean suspend fun unmute(): Boolean
} }
@ExperimentalTime @ExperimentalTime
......
...@@ -12,31 +12,41 @@ class GentleImage { ...@@ -12,31 +12,41 @@ class GentleImage {
// `Deferred<Image?>` causes a runtime ClassCastException // `Deferred<Image?>` causes a runtime ClassCastException
val image: Deferred<Image> by lazy { val image: Deferred<Image> by lazy { getImage(0) }
GlobalScope.async {
//delay((Math.random() * 5000L).toLong()) val seImage: Deferred<Image> by lazy { getImage(1) }
class Result {
var id: String = ""
}
fun getImage(r18: Int): Deferred<Image> {
return GlobalScope.async {
withTimeoutOrNull(5 * 1000) { withTimeoutOrNull(5 * 1000) {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
val result = JSON.parseObject( val result =
Jsoup.connect("http://dev.itxtech.org:10322/v2/randomImg.uue").ignoreContentType(true).timeout(10_0000).get().body().text(), JSON.parseObject(
Result::class.java Jsoup.connect("https://api.lolicon.app/setu/?r18=$r18").ignoreContentType(true).timeout(
10_0000
).get().body().text()
) )
Jsoup.connect("http://dev.itxtech.org:10322/img.uue?size=large&id=${result.id}") val url: String
.userAgent(UserAgent.randomUserAgent) val pid: String
.timeout(10_0000) with(result.getJSONArray("data").getJSONObject(0)) {
url = this.getString("url")
pid = this.getString("pid")
}
Jsoup
.connect(url)
.followRedirects(true)
.timeout(180_000)
.ignoreContentType(true) .ignoreContentType(true)
.maxBodySize(Int.MAX_VALUE) .userAgent("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27")
.execute() .referrer("https://www.pixiv.net/member_illust.php?mode=medium&illust_id=$pid")
.bodyStream() .ignoreHttpErrors(true)
.maxBodySize(10000000)
.execute().also { check(it.statusCode() == 200) { "Failed to download image" } }
} }
}?.uploadAsImage(contact) ?: error("Unable to download image") }?.bodyStream()?.uploadAsImage(contact) ?: error("Unable to download image")
} }
} }
} }
...@@ -151,7 +151,7 @@ suspend fun main() { ...@@ -151,7 +151,7 @@ suspend fun main() {
file.sendAsImageTo(subject) file.sendAsImageTo(subject)
} }
startsWith("随机图片", removePrefix = true) { startsWith("色图", removePrefix = true) {
repeat(it.toIntOrNull() ?: 1) { repeat(it.toIntOrNull() ?: 1) {
GlobalScope.launch { GlobalScope.launch {
delay(Random.Default.nextLong(100, 1000)) delay(Random.Default.nextLong(100, 1000))
...@@ -160,6 +160,15 @@ suspend fun main() { ...@@ -160,6 +160,15 @@ suspend fun main() {
} }
} }
startsWith("不够色", removePrefix = true) {
repeat(it.toIntOrNull() ?: 1) {
GlobalScope.launch {
delay(Random.Default.nextLong(100, 1000))
Gentlemen.provide(subject).receive().seImage.await().send()
}
}
}
startsWith("添加好友", removePrefix = true) { startsWith("添加好友", removePrefix = true) {
reply(bot.addFriend(it.toLong()).toString()) reply(bot.addFriend(it.toLong()).toString())
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment