mirror of
https://github.com/whitechi73/OpenShamrock.git
synced 2024-08-14 13:12:17 +08:00
Shamrock
: fix #191
This commit is contained in:
parent
e45e9e7fa0
commit
131f56a468
@ -0,0 +1,51 @@
|
||||
package tencent.im.oidb.cmd0x8a7;
|
||||
|
||||
import com.tencent.mobileqq.pb.ByteStringMicro;
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBoolField;
|
||||
import com.tencent.mobileqq.pb.PBBytesField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public class cmd0x8a7 {
|
||||
public static class ReqBody
|
||||
extends MessageMicro<ReqBody>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__;
|
||||
public final PBUInt32Field uint32_limit_interval_type_for_group = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_limit_interval_type_for_uin = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_sub_cmd = PBField.initUInt32(0);
|
||||
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0L);
|
||||
public final PBUInt64Field uint64_uin = PBField.initUInt64(0L);
|
||||
|
||||
static
|
||||
{
|
||||
Integer localInteger = Integer.valueOf(0);
|
||||
Long localLong = Long.valueOf(0L);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40 }, new String[] { "uint32_sub_cmd", "uint32_limit_interval_type_for_uin", "uint32_limit_interval_type_for_group", "uint64_uin", "uint64_group_code" }, new Object[] { localInteger, localInteger, localInteger, localLong, localLong }, ReqBody.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static class RspBody
|
||||
extends MessageMicro<RspBody>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__;
|
||||
public final PBBoolField bool_can_at_all = PBField.initBool(false);
|
||||
public final PBBoolField bool_show_at_all_lable = PBField.initBool(false);
|
||||
public final PBBytesField bytes_prompt_msg_1 = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
public final PBBytesField bytes_prompt_msg_2 = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
public final PBUInt32Field uint32_remain_at_all_count_for_group = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_remain_at_all_count_for_uin = PBField.initUInt32(0);
|
||||
|
||||
static
|
||||
{
|
||||
Integer localInteger = Integer.valueOf(0);
|
||||
Boolean localBoolean = Boolean.valueOf(false);
|
||||
ByteStringMicro localByteStringMicro1 = ByteStringMicro.EMPTY;
|
||||
ByteStringMicro localByteStringMicro2 = ByteStringMicro.EMPTY;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 34, 42, 48 }, new String[] { "bool_can_at_all", "uint32_remain_at_all_count_for_uin", "uint32_remain_at_all_count_for_group", "bytes_prompt_msg_1", "bytes_prompt_msg_2", "bool_show_at_all_lable" }, new Object[] { localBoolean, localInteger, localInteger, localByteStringMicro1, localByteStringMicro2, localBoolean }, RspBody.class);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -47,7 +47,9 @@ import moe.fuqiuluo.proto.ProtoUtils
|
||||
import moe.fuqiuluo.proto.asInt
|
||||
import moe.fuqiuluo.proto.asUtf8String
|
||||
import moe.fuqiuluo.proto.protobufOf
|
||||
import moe.fuqiuluo.qqinterface.servlet.TicketSvc.getLongUin
|
||||
import moe.fuqiuluo.qqinterface.servlet.TicketSvc.getUin
|
||||
import moe.fuqiuluo.qqinterface.servlet.entries.GroupAtAllRemainInfo
|
||||
import moe.fuqiuluo.qqinterface.servlet.entries.ProhibitedMemberInfo
|
||||
import moe.fuqiuluo.shamrock.helper.Level
|
||||
import moe.fuqiuluo.shamrock.helper.LogCenter
|
||||
@ -76,6 +78,7 @@ import tencent.im.group.group_member_info
|
||||
import tencent.im.oidb.cmd0x899.oidb_0x899
|
||||
import tencent.im.oidb.cmd0x89a.oidb_0x89a
|
||||
import tencent.im.oidb.cmd0x8a0.oidb_0x8a0
|
||||
import tencent.im.oidb.cmd0x8a7.cmd0x8a7
|
||||
import tencent.im.oidb.cmd0x8fc.Oidb_0x8fc
|
||||
import tencent.im.oidb.cmd0xeb7.oidb_0xeb7
|
||||
import tencent.im.oidb.oidb_sso
|
||||
@ -102,6 +105,27 @@ internal object GroupSvc: BaseSvc() {
|
||||
private lateinit var METHOD_REQ_TROOP_MEM_LIST: Method
|
||||
private lateinit var METHOD_REQ_MODIFY_GROUP_NAME: Method
|
||||
|
||||
suspend fun getGroupRemainAtAllRemain (groupId: Long): Result<GroupAtAllRemainInfo> {
|
||||
val buffer = sendOidbAW("OidbSvcTrpcTcp.0x8a7_0", 2215, 0, cmd0x8a7.ReqBody().apply {
|
||||
uint32_sub_cmd.set(1)
|
||||
uint32_limit_interval_type_for_uin.set(2)
|
||||
uint32_limit_interval_type_for_group.set(1)
|
||||
uint64_uin.set(getLongUin())
|
||||
uint64_group_code.set(groupId)
|
||||
}.toByteArray(), trpc = true) ?: return Result.failure(RuntimeException("[oidb] timeout"))
|
||||
val body = oidb_sso.OIDBSSOPkg()
|
||||
body.mergeFrom(buffer.slice(4))
|
||||
if(body.uint32_result.get() != 0) {
|
||||
return Result.failure(RuntimeException(body.str_error_msg.get()))
|
||||
}
|
||||
|
||||
val resp = cmd0x8a7.RspBody().mergeFrom(body.bytes_bodybuffer.get().toByteArray())
|
||||
return Result.success(GroupAtAllRemainInfo(
|
||||
canAtAll = resp.bool_can_at_all.get(),
|
||||
remainAtAllCountForGroup = resp.uint32_remain_at_all_count_for_group.get(),
|
||||
remainAtAllCountForUin = resp.uint32_remain_at_all_count_for_uin.get()
|
||||
))
|
||||
}
|
||||
suspend fun getProhibitedMemberList(groupId: Long): Result<List<ProhibitedMemberInfo>> {
|
||||
val buffer = sendOidbAW("OidbSvc.0x899_0", 2201, 0, oidb_0x899.ReqBody().apply {
|
||||
uint64_group_code.set(groupId)
|
||||
|
@ -7,4 +7,11 @@ import kotlinx.serialization.Serializable
|
||||
internal data class ProhibitedMemberInfo(
|
||||
@SerialName("user_id") val memberUin: Long,
|
||||
@SerialName("time") val shutuptimestap: Int
|
||||
)
|
||||
|
||||
@Serializable
|
||||
internal data class GroupAtAllRemainInfo(
|
||||
@SerialName("can_at_all") val canAtAll: Boolean,
|
||||
@SerialName("remain_at_all_count_for_group") val remainAtAllCountForGroup: Int,
|
||||
@SerialName("remain_at_all_count_for_uin") val remainAtAllCountForUin: Int
|
||||
)
|
@ -32,6 +32,7 @@ internal object ActionManager {
|
||||
ModifyTroopName, LeaveTroop, KickTroopMember, BanTroopMember, SetGroupWholeBan, SetGroupAdmin,
|
||||
ModifyTroopMemberName, SetGroupUnique, GetTroopHonor, GroupPoke, SetEssenceMessage, DeleteEssenceMessage,
|
||||
GetGroupSystemMsg, GetProhibitedMemberList, GetEssenceMessageList, GetGroupNotice, SendGroupNotice, SendGroupSign,
|
||||
GetGroupRemainAtAllRemain,
|
||||
|
||||
// MSG ACTIONS
|
||||
SendMessage, DeleteMessage, GetMsg, GetForwardMsg, SendPrivateForwardMessage, SendGroupMessage, SendPrivateMessage,
|
||||
|
@ -0,0 +1,29 @@
|
||||
package moe.fuqiuluo.shamrock.remote.action.handlers
|
||||
|
||||
import kotlinx.serialization.json.JsonElement
|
||||
import moe.fuqiuluo.qqinterface.servlet.GroupSvc
|
||||
import moe.fuqiuluo.shamrock.remote.action.ActionSession
|
||||
import moe.fuqiuluo.shamrock.remote.action.IActionHandler
|
||||
import moe.fuqiuluo.shamrock.tools.EmptyJsonString
|
||||
|
||||
internal object GetGroupRemainAtAllRemain: IActionHandler() {
|
||||
override suspend fun internalHandle(session: ActionSession): String {
|
||||
val groupId = session.getLong("group_id")
|
||||
return invoke(groupId, session.echo)
|
||||
}
|
||||
|
||||
suspend operator fun invoke(
|
||||
groupId: Long,
|
||||
echo: JsonElement = EmptyJsonString
|
||||
): String {
|
||||
val result = GroupSvc.getGroupRemainAtAllRemain(groupId)
|
||||
if (result.isFailure) {
|
||||
return error(result.exceptionOrNull()?.message ?: "获取群 @全体成员 剩余次数失败", echo, arrayResult = true)
|
||||
}
|
||||
return ok(result.getOrThrow(), echo)
|
||||
}
|
||||
|
||||
override val requiredParams: Array<String> = arrayOf("group_id")
|
||||
|
||||
override fun path(): String = "get_group_at_all_remain"
|
||||
}
|
@ -145,4 +145,9 @@ fun Routing.troopAction() {
|
||||
call.respondText(SendGroupSign(groupId), ContentType.Application.Json)
|
||||
}
|
||||
|
||||
getOrPost("/get_group_at_all_remain") {
|
||||
val groupId = fetchOrThrow("group_id").toLong()
|
||||
call.respondText(GetGroupRemainAtAllRemain(groupId), ContentType.Application.Json)
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user