diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index dc2e8997..9c9eb1b2 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -204,6 +204,9 @@ group.visible_quit_or_kickoff_notification 0 ## 是否禁止陌生人拉人入群,默认为false group.disable_stranger_invite false +## 群组信息是否标记删除 +group.enable_mark_deletion true + ## 隐藏用户信息属性类型,2是性别,3是电话号码,4是邮箱,5是地址,6是公司信息,7是社交账号,8是Extra信息。当需要隐藏多个时以英文逗号分开; ## 本配置是为了提高安全性,避免把对应信息同步到客户端,这样就能防止程序被破解从而拿到用户关键信息。仅对客户端有效,server api不受影响。 ## 注意,修改本配置不会对已经同步的信息产生影响。 diff --git a/broker/migrate/h2/V48__group_add_deleted_column.sql b/broker/migrate/h2/V48__group_add_deleted_column.sql new file mode 100755 index 00000000..dce8d96c --- /dev/null +++ b/broker/migrate/h2/V48__group_add_deleted_column.sql @@ -0,0 +1,2 @@ +alter table `t_group` add column `_deleted` tinyint NOT NULL DEFAULT 0; + diff --git a/broker/migrate/mysql/V55__group_add_deleted_column.sql b/broker/migrate/mysql/V55__group_add_deleted_column.sql new file mode 100755 index 00000000..9f11961c --- /dev/null +++ b/broker/migrate/mysql/V55__group_add_deleted_column.sql @@ -0,0 +1 @@ +alter table `t_group` add column `_deleted` tinyint NOT NULL DEFAULT 0; diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupInfoAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupInfoAction.java index 4014dfaa..0c442f70 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupInfoAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupInfoAction.java @@ -60,6 +60,7 @@ public class GetGroupInfoAction extends AdminAction { pojoGroupInfo.setMax_member_count(groupInfo.getMemberCount()); pojoGroupInfo.setHistory_message(groupInfo.getHistoryMessage()); pojoGroupInfo.setSuper_group(groupInfo.getSuperGroup()>0); + pojoGroupInfo.setDeleted(groupInfo.getDeleted()>0); result = RestResult.ok(pojoGroupInfo); } setResponseContent(result, response); diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetGroupInfoAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetGroupInfoAction.java index 3b57f286..d4ffb3fe 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetGroupInfoAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetGroupInfoAction.java @@ -56,6 +56,10 @@ public class GetGroupInfoAction extends RobotAction { pojoGroupInfo.setJoin_type(groupInfo.getJoinType()); pojoGroupInfo.setPrivate_chat(groupInfo.getPrivateChat()); pojoGroupInfo.setSearchable(groupInfo.getSearchable()); + pojoGroupInfo.setMax_member_count(groupInfo.getMemberCount()); + pojoGroupInfo.setHistory_message(groupInfo.getHistoryMessage()); + pojoGroupInfo.setSuper_group(groupInfo.getSuperGroup()>0); + pojoGroupInfo.setDeleted(groupInfo.getDeleted()>0); result = RestResult.ok(pojoGroupInfo); } setResponseContent(result, response); diff --git a/broker/src/main/java/io/moquette/BrokerConstants.java b/broker/src/main/java/io/moquette/BrokerConstants.java index e2bc9d19..29648be8 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -188,6 +188,8 @@ public final class BrokerConstants { public static final String GROUP_Disable_Stranger_Invite = "group.disable_stranger_invite"; + public static final String GROUP_INFO_MARK_DELETION = "group.enable_mark_deletion"; + public static final String USER_HIDE_PROPERTIES = "user.hide_properties"; public static final String USER_KEEP_DISPLAY_NAME_WHEN_DESTROY = "user.keep_display_name_when_destroy"; diff --git a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java index a6cf56ef..a4e5ecf8 100644 --- a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java @@ -27,7 +27,7 @@ public class CreateGroupHandler extends GroupHandler 0) { sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), request.getNotifyContent()); } else { diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index a783d861..8815d555 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -36,6 +36,7 @@ import java.util.function.Function; import static cn.wildfirechat.common.IMExceptionEvent.EventType.RDBS_Exception; import static cn.wildfirechat.proto.ProtoConstants.PersistFlag.Transparent; +import static io.moquette.BrokerConstants.GROUP_INFO_MARK_DELETION; import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE; import static cn.wildfirechat.proto.ProtoConstants.SearchUserType.*; import static win.liyufan.im.UserSettingScope.kUserSettingPrivacySearchable; @@ -45,6 +46,7 @@ public class DatabaseStore { private final ThreadPoolExecutorWrapper mScheduler; private boolean disableRemoteMessageSearch = false; private boolean encryptMessage = false; + private boolean keepGroupInfo = false; public void setDisableRemoteMessageSearch(boolean disableRemoteMessageSearch) { this.disableRemoteMessageSearch = disableRemoteMessageSearch; } @@ -55,6 +57,11 @@ public class DatabaseStore { public DatabaseStore(ThreadPoolExecutorWrapper scheduler) { this.mScheduler = scheduler; + try { + keepGroupInfo = Boolean.parseBoolean(Server.getServer().getConfig().getProperty(GROUP_INFO_MARK_DELETION, "false")); + } catch (Exception e) { + + } } TreeMap reloadUserMessageMaps(String userId) { @@ -1425,7 +1432,8 @@ public class DatabaseStore { ", `_join_type`" + ", `_private_chat`" + ", `_searchable`" + - ", `_member_dt`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + + ", `_deleted`" + + ", `_member_dt`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + " ON DUPLICATE KEY UPDATE " + "`_name` = ?," + "`_portrait` = ?," + @@ -1436,8 +1444,9 @@ public class DatabaseStore { "`_mute` = ?" + ", `_join_type` = ?" + ", `_private_chat` = ?" + - ", `_searchable` = ?, " + - "`_member_dt` = ?"; + ", `_searchable` = ?" + + ", `_deleted` = ?" + + ", `_member_dt` = ?"; statement = connection.prepareStatement(sql); @@ -1455,6 +1464,7 @@ public class DatabaseStore { statement.setInt(index++, groupInfo.getJoinType()); statement.setInt(index++, groupInfo.getPrivateChat()); statement.setInt(index++, groupInfo.getSearchable()); + statement.setInt(index++, groupInfo.getDeleted()); statement.setLong(index++, groupInfo.getMemberUpdateDt() == 0 ? System.currentTimeMillis() : groupInfo.getUpdateDt()); statement.setString(index++, groupInfo.getName()); @@ -1467,6 +1477,7 @@ public class DatabaseStore { statement.setInt(index++, groupInfo.getJoinType()); statement.setInt(index++, groupInfo.getPrivateChat()); statement.setInt(index++, groupInfo.getSearchable()); + statement.setInt(index++, groupInfo.getDeleted()); statement.setLong(index++, groupInfo.getMemberUpdateDt() == 0 ? System.currentTimeMillis() : groupInfo.getUpdateDt()); int count = statement.executeUpdate(); LOG.info("Update rows {}", count); @@ -3410,8 +3421,12 @@ public class DatabaseStore { PreparedStatement statement = null; try { connection = DBUtil.getConnection(); - String sql = "delete from t_group where _gid = ?"; - + String sql; + if(keepGroupInfo) { + sql = "update t_group set _deleted = 1, _dt = _dt+1, _member_count = 0, _member_dt = _member_dt+1 where _gid = ?"; + } else { + sql = "delete from t_group where _gid = ?"; + } statement = connection.prepareStatement(sql); int index = 1; diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 5fd7a7e5..326cf955 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1368,7 +1368,7 @@ public class MemoryMessagesStore implements IMessagesStore { event.type = type; PojoGroupInfo pojoGroupInfo = new PojoGroupInfo(); event.groupInfo = pojoGroupInfo; - if (groupInfo != null) { + if (groupInfo != null && groupInfo.getDeleted() == 0) { pojoGroupInfo.setExtra(groupInfo.getExtra()); pojoGroupInfo.setName(groupInfo.getName()); pojoGroupInfo.setOwner(groupInfo.getOwner()); @@ -1900,7 +1900,7 @@ public class MemoryMessagesStore implements IMessagesStore { WFCMessage.GroupInfo groupInfo = mIMap.get(groupId); if (groupInfo == null) { groupInfo = databaseStore.getPersistGroupInfo(groupId); - if (groupInfo != null) { + if (groupInfo != null && groupInfo.getDeleted() == 0) { mIMap.set(groupId, groupInfo); } else { return ErrorCode.ERROR_CODE_NOT_EXIST; @@ -1985,7 +1985,7 @@ public class MemoryMessagesStore implements IMessagesStore { WFCMessage.GroupInfo groupInfo = mIMap.get(groupId); if (groupInfo == null) { groupInfo = databaseStore.getPersistGroupInfo(groupId); - if (groupInfo != null) { + if (groupInfo != null && groupInfo.getDeleted() == 0) { mIMap.set(groupId, groupInfo); } else { return ErrorCode.ERROR_CODE_NOT_EXIST; @@ -2069,13 +2069,6 @@ public class MemoryMessagesStore implements IMessagesStore { ArrayList out = new ArrayList<>(); for (WFCMessage.UserRequest request : requests) { WFCMessage.GroupInfo groupInfo = mIMap.get(request.getUid()); - if (groupInfo == null) { - groupInfo = databaseStore.getPersistGroupInfo(request.getUid()); - if (groupInfo != null) { - mIMap.set(request.getUid(), groupInfo); - } - } - if (groupInfo != null && groupInfo.getUpdateDt() > request.getUpdateDt()) { if(!isAdmin && !StringUtil.isNullOrEmpty(fromUser)) { WFCMessage.GroupMember gm = getGroupMember(groupInfo.getTargetId(), fromUser); @@ -2306,7 +2299,7 @@ public class MemoryMessagesStore implements IMessagesStore { IMap groups = hzInstance.getMap(GROUPS_MAP); WFCMessage.GroupInfo groupInfo = groups.get(groupId); boolean isMute = false; - if (groupInfo != null) { + if (groupInfo != null && groupInfo.getDeleted() == 0) { if (groupInfo.getOwner().equals(memberId)) { return ErrorCode.ERROR_CODE_SUCCESS; } diff --git a/common/src/main/java/cn/wildfirechat/pojos/GetUserSessionResult.java b/common/src/main/java/cn/wildfirechat/pojos/GetUserSessionResult.java index 8f60365c..19bb16fe 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/GetUserSessionResult.java +++ b/common/src/main/java/cn/wildfirechat/pojos/GetUserSessionResult.java @@ -1,5 +1,6 @@ package cn.wildfirechat.pojos; + import java.util.ArrayList; import java.util.List; @@ -33,3 +34,4 @@ public class GetUserSessionResult { userSessions = new ArrayList<>(); } } + diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputConferenceRequest.java b/common/src/main/java/cn/wildfirechat/pojos/InputConferenceRequest.java old mode 100644 new mode 100755 index 56ca22f7..8a8626bc --- a/common/src/main/java/cn/wildfirechat/pojos/InputConferenceRequest.java +++ b/common/src/main/java/cn/wildfirechat/pojos/InputConferenceRequest.java @@ -1,3 +1,11 @@ +/* + * This file is part of the Wildfire Chat package. + * (c) Heavyrain2012 + * + * For the full copyright and license information; please view the LICENSE + * file that was distributed with this source code. + */ + package cn.wildfirechat.pojos; public class InputConferenceRequest { diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java b/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java index 133e7ab6..4c669748 100755 --- a/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java +++ b/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java @@ -68,6 +68,7 @@ public class InputCreateGroup extends InputGroupBase { if(group_info.isSuper_group()) { groupInfoBuilder.setSuperGroup(1); } + groupInfoBuilder.setDeleted(0); groupBuilder.setGroupInfo(groupInfoBuilder); if(group.getMembers() != null) { diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputGetUserSK.java b/common/src/main/java/cn/wildfirechat/pojos/InputGetUserSK.java new file mode 100755 index 00000000..faed5a63 --- /dev/null +++ b/common/src/main/java/cn/wildfirechat/pojos/InputGetUserSK.java @@ -0,0 +1,35 @@ +/* + * This file is part of the Wildfire Chat package. + * (c) Heavyrain2012 + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +package cn.wildfirechat.pojos; + +public class InputGetUserSK { + private String uid; + private String cid; + + public InputGetUserSK(String uid, String cid) { + this.uid = uid; + this.cid = cid; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public String getCid() { + return cid; + } + + public void setCid(String cid) { + this.cid = cid; + } +} diff --git a/common/src/main/java/cn/wildfirechat/pojos/OutputReadData.java b/common/src/main/java/cn/wildfirechat/pojos/OutputReadData.java index 61eab8ca..5b56b0c4 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/OutputReadData.java +++ b/common/src/main/java/cn/wildfirechat/pojos/OutputReadData.java @@ -1,5 +1,14 @@ +/* + * This file is part of the Wildfire Chat package. + * (c) Heavyrain2012 + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + package cn.wildfirechat.pojos; + public class OutputReadData { public String user; public Conversation conversation; diff --git a/common/src/main/java/cn/wildfirechat/pojos/PojoGroupInfo.java b/common/src/main/java/cn/wildfirechat/pojos/PojoGroupInfo.java index 090426b5..f5d92b0b 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/PojoGroupInfo.java +++ b/common/src/main/java/cn/wildfirechat/pojos/PojoGroupInfo.java @@ -22,6 +22,7 @@ public class PojoGroupInfo { int max_member_count; int history_message; boolean super_group; + boolean deleted; public String getTarget_id() { return target_id; @@ -126,4 +127,12 @@ public class PojoGroupInfo { public void setSuper_group(boolean super_group) { this.super_group = super_group; } + + public boolean isDeleted() { + return deleted; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } } diff --git a/common/src/main/java/cn/wildfirechat/proto/WFCMessage.java b/common/src/main/java/cn/wildfirechat/proto/WFCMessage.java index ff140ccc..394379e9 100644 --- a/common/src/main/java/cn/wildfirechat/proto/WFCMessage.java +++ b/common/src/main/java/cn/wildfirechat/proto/WFCMessage.java @@ -1651,6 +1651,16 @@ public final class WFCMessage { * optional int32 super_group = 16; */ int getSuperGroup(); + + // optional int32 deleted = 17; + /** + * optional int32 deleted = 17; + */ + boolean hasDeleted(); + /** + * optional int32 deleted = 17; + */ + int getDeleted(); } /** * Protobuf type {@code GroupInfo} @@ -1783,6 +1793,11 @@ public final class WFCMessage { superGroup_ = input.readInt32(); break; } + case 136: { + bitField0_ |= 0x00010000; + deleted_ = input.readInt32(); + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -2214,6 +2229,22 @@ public final class WFCMessage { return superGroup_; } + // optional int32 deleted = 17; + public static final int DELETED_FIELD_NUMBER = 17; + private int deleted_; + /** + * optional int32 deleted = 17; + */ + public boolean hasDeleted() { + return ((bitField0_ & 0x00010000) == 0x00010000); + } + /** + * optional int32 deleted = 17; + */ + public int getDeleted() { + return deleted_; + } + private void initFields() { targetId_ = ""; name_ = ""; @@ -2231,6 +2262,7 @@ public final class WFCMessage { maxMemberCount_ = 0; historyMessage_ = 0; superGroup_ = 0; + deleted_ = 0; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -2300,6 +2332,9 @@ public final class WFCMessage { if (((bitField0_ & 0x00008000) == 0x00008000)) { output.writeInt32(16, superGroup_); } + if (((bitField0_ & 0x00010000) == 0x00010000)) { + output.writeInt32(17, deleted_); + } getUnknownFields().writeTo(output); } @@ -2373,6 +2408,10 @@ public final class WFCMessage { size += com.google.protobuf.CodedOutputStream .computeInt32Size(16, superGroup_); } + if (((bitField0_ & 0x00010000) == 0x00010000)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(17, deleted_); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -2521,6 +2560,8 @@ public final class WFCMessage { bitField0_ = (bitField0_ & ~0x00004000); superGroup_ = 0; bitField0_ = (bitField0_ & ~0x00008000); + deleted_ = 0; + bitField0_ = (bitField0_ & ~0x00010000); return this; } @@ -2613,6 +2654,10 @@ public final class WFCMessage { to_bitField0_ |= 0x00008000; } result.superGroup_ = superGroup_; + if (((from_bitField0_ & 0x00010000) == 0x00010000)) { + to_bitField0_ |= 0x00010000; + } + result.deleted_ = deleted_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -2687,6 +2732,9 @@ public final class WFCMessage { if (other.hasSuperGroup()) { setSuperGroup(other.getSuperGroup()); } + if (other.hasDeleted()) { + setDeleted(other.getDeleted()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -3455,6 +3503,39 @@ public final class WFCMessage { return this; } + // optional int32 deleted = 17; + private int deleted_ ; + /** + * optional int32 deleted = 17; + */ + public boolean hasDeleted() { + return ((bitField0_ & 0x00010000) == 0x00010000); + } + /** + * optional int32 deleted = 17; + */ + public int getDeleted() { + return deleted_; + } + /** + * optional int32 deleted = 17; + */ + public Builder setDeleted(int value) { + bitField0_ |= 0x00010000; + deleted_ = value; + onChanged(); + return this; + } + /** + * optional int32 deleted = 17; + */ + public Builder clearDeleted() { + bitField0_ = (bitField0_ & ~0x00010000); + deleted_ = 0; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:GroupInfo) } @@ -67305,7 +67386,7 @@ public final class WFCMessage { "dRequest\022\022\n\ntarget_uid\030\001 \002(\t\022\016\n\006reason\030\002" + " \002(\t\022\r\n\005extra\030\003 \001(\t\":\n\014Conversation\022\014\n\004t" + "ype\030\001 \002(\005\022\016\n\006target\030\002 \002(\t\022\014\n\004line\030\003 \002(\005\"" + - "\300\002\n\tGroupInfo\022\021\n\ttarget_id\030\001 \001(\t\022\014\n\004name" + + "\321\002\n\tGroupInfo\022\021\n\ttarget_id\030\001 \001(\t\022\014\n\004name" + "\030\002 \002(\t\022\020\n\010portrait\030\003 \001(\t\022\r\n\005owner\030\004 \001(\t\022" + "\014\n\004type\030\005 \002(\005\022\024\n\014member_count\030\006 \001(\005\022\r\n\005e" + "xtra\030\007 \001(\t\022\021\n\tupdate_dt\030\010 \001(\003\022\030\n\020member_" + @@ -67313,172 +67394,172 @@ public final class WFCMessage { "pe\030\013 \001(\005\022\024\n\014private_chat\030\014 \001(\005\022\022\n\nsearch", "able\030\r \001(\005\022\030\n\020max_member_count\030\016 \001(\005\022\027\n\017" + "history_message\030\017 \001(\005\022\023\n\013super_group\030\020 \001" + - "(\005\"r\n\013GroupMember\022\021\n\tmember_id\030\001 \002(\t\022\r\n\005" + - "alias\030\002 \001(\t\022\014\n\004type\030\003 \002(\005\022\021\n\tupdate_dt\030\004" + - " \001(\003\022\021\n\tcreate_dt\030\005 \001(\003\022\r\n\005extra\030\006 \001(\t\"F" + - "\n\005Group\022\036\n\ngroup_info\030\001 \002(\0132\n.GroupInfo\022" + - "\035\n\007members\030\002 \003(\0132\014.GroupMember\"\313\001\n\013Chann" + - "elMenu\022\014\n\004type\030\001 \002(\t\022\014\n\004name\030\002 \002(\t\022\013\n\003ke" + - "y\030\003 \001(\t\022\013\n\003url\030\004 \001(\t\022\020\n\010media_id\030\005 \001(\t\022\022" + - "\n\narticle_id\030\006 \001(\t\022\016\n\006app_id\030\007 \001(\t\022\020\n\010ap", - "p_page\030\010 \001(\t\022\036\n\010sub_menu\030\t \003(\0132\014.Channel" + - "Menu\022\017\n\007menu_id\030\n \001(\t\022\r\n\005extra\030\013 \001(\t\"-\n\017" + - "ChannelMenuList\022\032\n\004menu\030\001 \003(\0132\014.ChannelM" + - "enu\"\340\001\n\013ChannelInfo\022\021\n\ttarget_id\030\001 \001(\t\022\014" + - "\n\004name\030\002 \002(\t\022\020\n\010portrait\030\003 \001(\t\022\r\n\005owner\030" + - "\004 \001(\t\022\016\n\006status\030\005 \001(\005\022\014\n\004desc\030\006 \001(\t\022\r\n\005e" + - "xtra\030\007 \001(\t\022\021\n\tupdate_dt\030\010 \001(\003\022\016\n\006secret\030" + - "\t \001(\t\022\020\n\010callback\030\n \001(\t\022\021\n\tautomatic\030\013 \001" + - "(\005\022\032\n\004menu\030\014 \003(\0132\014.ChannelMenu\"D\n\021Modify" + - "ChannelInfo\022\022\n\nchannel_id\030\001 \002(\t\022\014\n\004type\030", - "\002 \002(\005\022\r\n\005value\030\003 \002(\t\"8\n\017TransferChannel\022" + - "\022\n\nchannel_id\030\001 \002(\t\022\021\n\tnew_owner\030\002 \002(\t\"3" + - "\n\017PullChannelInfo\022\022\n\nchannel_id\030\001 \002(\t\022\014\n" + - "\004head\030\002 \002(\003\"H\n\023PullChannelListener\022\022\n\nch" + - "annel_id\030\001 \002(\t\022\016\n\006offset\030\002 \002(\005\022\r\n\005count\030" + - "\003 \002(\005\"R\n\031PullChannelListenerResult\022\023\n\013to" + - "tal_count\030\001 \002(\005\022\016\n\006offset\030\002 \002(\005\022\020\n\010liste" + - "ner\030\003 \003(\t\"3\n\rListenChannel\022\022\n\nchannel_id" + - "\030\001 \002(\t\022\016\n\006listen\030\002 \002(\005\"E\n\023SearchChannelR" + - "esult\022\035\n\007channel\030\001 \003(\0132\014.ChannelInfo\022\017\n\007", - "keyword\030\002 \002(\t\"\235\002\n\016MessageContent\022\014\n\004type" + - "\030\001 \002(\005\022\032\n\022searchable_content\030\002 \001(\t\022\024\n\014pu" + - "sh_content\030\003 \001(\t\022\017\n\007content\030\004 \001(\t\022\014\n\004dat" + - "a\030\005 \001(\014\022\021\n\tmediaType\030\006 \001(\005\022\026\n\016remoteMedi" + - "aUrl\030\007 \001(\t\022\024\n\014persist_flag\030\010 \001(\005\022\027\n\017expi" + - "re_duration\030\t \001(\005\022\026\n\016mentioned_type\030\n \001(" + - "\005\022\030\n\020mentioned_target\030\013 \003(\t\022\r\n\005extra\030\014 \001" + - "(\t\022\021\n\tpush_data\030\r \001(\t\"\226\001\n\025AddGroupMember" + - "Request\022\020\n\010group_id\030\001 \002(\t\022\"\n\014added_membe" + - "r\030\002 \003(\0132\014.GroupMember\022\017\n\007to_line\030\003 \003(\005\022\'", - "\n\016notify_content\030\004 \001(\0132\017.MessageContent\022" + - "\r\n\005extra\030\005 \001(\t\"{\n\022CreateGroupRequest\022\025\n\005" + - "group\030\001 \002(\0132\006.Group\022\017\n\007to_line\030\002 \003(\005\022\'\n\016" + - "notify_content\030\003 \001(\0132\017.MessageContent\022\024\n" + - "\014member_extra\030\004 \001(\t\"a\n\023DismissGroupReque" + - "st\022\020\n\010group_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003(\005\022\'\n" + - "\016notify_content\030\003 \001(\0132\017.MessageContent\"\245" + - "\001\n\rFriendRequest\022\020\n\010from_uid\030\001 \001(\t\022\016\n\006to" + - "_uid\030\002 \002(\t\022\016\n\006reason\030\003 \002(\t\022\016\n\006status\030\004 \001" + - "(\005\022\021\n\tupdate_dt\030\005 \001(\003\022\030\n\020from_read_statu", - "s\030\006 \001(\010\022\026\n\016to_read_status\030\007 \001(\010\022\r\n\005extra" + - "\030\010 \001(\t\"#\n\rGeneralResult\022\022\n\nerror_code\030\001 " + - "\002(\005\"?\n\025GetUploadTokenRequest\022\022\n\nmedia_ty" + - "pe\030\001 \002(\005\022\022\n\nmedia_path\030\002 \002(\t\"S\n\024GetUploa" + - "dTokenResult\022\016\n\006domain\030\001 \002(\t\022\r\n\005token\030\002 " + - "\002(\t\022\016\n\006server\030\003 \002(\t\022\014\n\004port\030\004 \001(\005\"H\n\023Han" + - "dleFriendRequest\022\022\n\ntarget_uid\030\001 \002(\t\022\016\n\006" + - "status\030\002 \002(\005\022\r\n\005extra\030\003 \001(\t\"\023\n\005IDBuf\022\n\n\002" + - "id\030\001 \002(\t\"\027\n\tIDListBuf\022\n\n\002id\030\001 \003(\t\"\256\001\n\007Me" + - "ssage\022#\n\014conversation\030\001 \002(\0132\r.Conversati", - "on\022\021\n\tfrom_user\030\002 \002(\t\022 \n\007content\030\003 \002(\0132\017" + - ".MessageContent\022\022\n\nmessage_id\030\004 \001(\003\022\030\n\020s" + - "erver_timestamp\030\005 \001(\003\022\017\n\007to_user\030\006 \001(\t\022\n" + - "\n\002to\030\007 \003(\t\"\353\001\n\004User\022\013\n\003uid\030\001 \002(\t\022\014\n\004name" + - "\030\002 \001(\t\022\024\n\014display_name\030\003 \001(\t\022\020\n\010portrait" + - "\030\004 \001(\t\022\016\n\006mobile\030\005 \001(\t\022\r\n\005email\030\006 \001(\t\022\017\n" + - "\007address\030\007 \001(\t\022\017\n\007company\030\010 \001(\t\022\r\n\005extra" + - "\030\t \001(\t\022\021\n\tupdate_dt\030\n \001(\003\022\016\n\006gender\030\013 \001(" + - "\005\022\016\n\006social\030\014 \001(\t\022\014\n\004type\030\r \001(\005\022\017\n\007delet" + - "ed\030\016 \001(\005\"c\n\005Robot\022\013\n\003uid\030\001 \002(\t\022\r\n\005state\030", - "\002 \002(\005\022\r\n\005owner\030\003 \001(\t\022\016\n\006secret\030\004 \001(\t\022\020\n\010" + - "callback\030\005 \001(\t\022\r\n\005extra\030\006 \001(\t\"(\n\017GetRobo" + - "tsResult\022\025\n\005entry\030\001 \003(\0132\006.Robot\"g\n\030Uploa" + - "dDeviceTokenRequest\022\020\n\010platform\030\001 \002(\005\022\020\n" + - "\010app_name\030\002 \002(\t\022\024\n\014device_token\030\003 \002(\t\022\021\n" + - "\tpush_type\030\004 \002(\005\"\201\001\n\026ModifyGroupInfoRequ" + - "est\022\020\n\010group_id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022\r\n\005v" + - "alue\030\003 \002(\t\022\017\n\007to_line\030\004 \003(\005\022\'\n\016notify_co" + - "ntent\030\005 \001(\0132\017.MessageContent\"\203\001\n\026SetGrou" + - "pManagerRequest\022\020\n\010group_id\030\001 \002(\t\022\014\n\004typ", - "e\030\002 \002(\005\022\017\n\007user_id\030\003 \003(\t\022\017\n\007to_line\030\004 \003(" + - "\005\022\'\n\016notify_content\030\005 \001(\0132\017.MessageConte" + - "nt\"(\n\tInfoEntry\022\014\n\004type\030\001 \002(\005\022\r\n\005value\030\002" + - " \002(\t\"0\n\023ModifyMyInfoRequest\022\031\n\005entry\030\001 \003" + - "(\0132\n.InfoEntry\";\n\rNotifyMessage\022\014\n\004type\030" + - "\001 \002(\005\022\014\n\004head\030\002 \002(\003\022\016\n\006target\030\003 \001(\t\"=\n\022P" + - "ullMessageRequest\022\n\n\002id\030\001 \002(\003\022\014\n\004type\030\002 " + - "\002(\005\022\r\n\005delay\030\003 \001(\003\"M\n\021PullMessageResult\022" + - "\031\n\007message\030\001 \003(\0132\010.Message\022\017\n\007current\030\002 " + - "\002(\003\022\014\n\004head\030\003 \002(\003\"/\n\023PullGroupInfoResult", - "\022\030\n\004info\030\001 \003(\0132\n.GroupInfo\"6\n\026PullGroupM" + - "emberRequest\022\016\n\006target\030\001 \002(\t\022\014\n\004head\030\002 \002" + - "(\003\"5\n\025PullGroupMemberResult\022\034\n\006member\030\001 " + - "\003(\0132\014.GroupMember\"-\n\013UserRequest\022\013\n\003uid\030" + - "\001 \002(\t\022\021\n\tupdate_dt\030\002 \001(\003\"0\n\017PullUserRequ" + - "est\022\035\n\007request\030\001 \003(\0132\014.UserRequest\"/\n\nUs" + - "erResult\022\023\n\004user\030\001 \002(\0132\005.User\022\014\n\004code\030\002 " + - "\002(\005\"-\n\016PullUserResult\022\033\n\006result\030\001 \003(\0132\013." + - "UserResult\"^\n\020QuitGroupRequest\022\020\n\010group_" + - "id\030\001 \002(\t\022\017\n\007to_line\030\002 \003(\005\022\'\n\016notify_cont", - "ent\030\003 \001(\0132\017.MessageContent\"~\n\030RemoveGrou" + - "pMemberRequest\022\020\n\010group_id\030\001 \002(\t\022\026\n\016remo" + - "ved_member\030\002 \003(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016not" + - "ify_content\030\004 \001(\0132\017.MessageContent\"u\n\024Tr" + - "ansferGroupRequest\022\020\n\010group_id\030\001 \002(\t\022\021\n\t" + - "new_owner\030\002 \002(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016noti" + - "fy_content\030\004 \001(\0132\017.MessageContent\"\206\001\n\026Mo" + - "difyGroupMemberAlias\022\020\n\010group_id\030\001 \002(\t\022\r" + - "\n\005alias\030\002 \002(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016notify" + - "_content\030\004 \001(\0132\017.MessageContent\022\021\n\tmembe", - "r_id\030\005 \001(\t\"\206\001\n\026ModifyGroupMemberExtra\022\020\n" + - "\010group_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003(\005\022\'\n\016noti" + - "fy_content\030\003 \001(\0132\017.MessageContent\022\r\n\005ext" + - "ra\030\004 \001(\t\022\021\n\tmember_id\030\005 \001(\t\"P\n\020UserSetti" + - "ngEntry\022\r\n\005scope\030\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005v" + - "alue\030\003 \002(\t\022\021\n\tupdate_dt\030\004 \002(\003\"A\n\024ModifyU" + - "serSettingReq\022\r\n\005scope\030\001 \002(\005\022\013\n\003key\030\002 \002(" + - "\t\022\r\n\005value\030\003 \002(\t\"\032\n\007Version\022\017\n\007version\030\001" + - " \002(\003\"8\n\024GetUserSettingResult\022 \n\005entry\030\001 " + - "\003(\0132\021.UserSettingEntry\"f\n\006Friend\022\013\n\003uid\030", - "\001 \002(\t\022\r\n\005state\030\002 \002(\005\022\021\n\tupdate_dt\030\003 \002(\003\022" + - "\r\n\005alias\030\004 \001(\t\022\017\n\007blacked\030\005 \001(\005\022\r\n\005extra" + - "\030\006 \001(\t\"*\n\020GetFriendsResult\022\026\n\005entry\030\001 \003(" + - "\0132\007.Friend\"7\n\026GetFriendRequestResult\022\035\n\005" + - "entry\030\001 \003(\0132\016.FriendRequest\"\243\001\n\021ConnectA" + - "ckPayload\022\020\n\010msg_head\030\001 \001(\003\022\023\n\013friend_he" + - "ad\030\002 \001(\003\022\026\n\016friend_rq_head\030\003 \001(\003\022\024\n\014sett" + - "ing_head\030\004 \001(\003\022\021\n\tnode_addr\030\005 \001(\t\022\021\n\tnod" + - "e_port\030\006 \001(\005\022\023\n\013server_time\030\007 \001(\003\"P\n\rIMH" + - "ttpWrapper\022\r\n\005token\030\001 \002(\t\022\021\n\tclient_id\030\002", - " \002(\t\022\017\n\007request\030\003 \002(\t\022\014\n\004data\030\004 \001(\014\"A\n\021S" + - "earchUserRequest\022\017\n\007keyword\030\001 \002(\t\022\r\n\005fuz" + - "zy\030\002 \001(\005\022\014\n\004page\030\003 \001(\005\"(\n\020SearchUserResu" + - "lt\022\024\n\005entry\030\001 \003(\0132\005.User\"@\n\026GetChatroomI" + - "nfoRequest\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tupdat" + - "e_dt\030\002 \001(\003\"\227\001\n\014ChatroomInfo\022\r\n\005title\030\001 \002" + - "(\t\022\014\n\004desc\030\002 \001(\t\022\020\n\010portrait\030\003 \001(\t\022\024\n\014me" + - "mber_count\030\004 \001(\005\022\021\n\tcreate_dt\030\005 \001(\003\022\021\n\tu" + - "pdate_dt\030\006 \001(\003\022\r\n\005extra\030\007 \001(\t\022\r\n\005state\030\010" + - " \001(\005\"F\n\034GetChatroomMemberInfoRequest\022\023\n\013", - "chatroom_id\030\001 \002(\t\022\021\n\tmax_count\030\002 \001(\005\";\n\022" + - "ChatroomMemberInfo\022\024\n\014member_count\030\001 \001(\005" + - "\022\017\n\007members\030\002 \003(\t\"\026\n\010INT64Buf\022\n\n\002id\030\001 \002(" + - "\003\"4\n\023NotifyRecallMessage\022\n\n\002id\030\001 \002(\003\022\021\n\t" + - "from_user\030\002 \002(\t\"/\n\020BlackUserRequest\022\013\n\003u" + - "id\030\001 \002(\t\022\016\n\006status\030\002 \002(\005\"\323\001\n\014RouteReques" + - "t\022\013\n\003app\030\001 \001(\t\022\020\n\010platform\030\002 \001(\005\022\021\n\tpush" + - "_type\030\003 \001(\005\022\023\n\013device_name\030\004 \001(\t\022\026\n\016devi" + - "ce_version\030\005 \001(\t\022\022\n\nphone_name\030\006 \001(\t\022\020\n\010" + - "language\030\007 \001(\t\022\024\n\014carrier_name\030\010 \001(\t\022\023\n\013", - "app_version\030\t \001(\t\022\023\n\013sdk_version\030\n \001(\t\"D" + - "\n\rRouteResponse\022\014\n\004host\030\001 \002(\t\022\021\n\tlong_po" + - "rt\030\002 \002(\005\022\022\n\nshort_port\030\003 \002(\005\"G\n\017GetToken" + - "Request\022\017\n\007user_id\030\001 \002(\t\022\021\n\tclient_id\030\002 " + - "\002(\t\022\020\n\010platform\030\003 \001(\005\"r\n\022LoadRemoteMessa" + - "ges\022#\n\014conversation\030\001 \002(\0132\r.Conversation" + - "\022\022\n\nbefore_uid\030\002 \002(\003\022\r\n\005count\030\003 \002(\005\022\024\n\014c" + - "ontent_type\030\004 \003(\005\"a\n\020MultiCastMessage\022\021\n" + - "\tfrom_user\030\001 \002(\t\022 \n\007content\030\002 \002(\0132\017.Mess" + - "ageContent\022\n\n\002to\030\003 \003(\t\022\014\n\004line\030\004 \002(\005\"E\n\035", - "RecallMultiCastMessageRequest\022\022\n\nmessage" + - "_id\030\001 \002(\003\022\020\n\010receiver\030\002 \003(\t\"@\n\017AuthCodeR" + - "equest\022\021\n\ttarget_id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022" + - "\014\n\004host\030\003 \002(\t\"o\n\030ApplicationConfigReques" + - "t\022\r\n\005appId\030\001 \002(\t\022\017\n\007appType\030\002 \002(\005\022\021\n\ttim" + - "estamp\030\003 \002(\003\022\r\n\005nonce\030\004 \002(\t\022\021\n\tsignature" + - "\030\005 \002(\tB/\n\025cn.wildfirechat.protoB\nWFCMess" + - "ageZ\n./go;proto" + "(\005\022\017\n\007deleted\030\021 \001(\005\"r\n\013GroupMember\022\021\n\tme" + + "mber_id\030\001 \002(\t\022\r\n\005alias\030\002 \001(\t\022\014\n\004type\030\003 \002" + + "(\005\022\021\n\tupdate_dt\030\004 \001(\003\022\021\n\tcreate_dt\030\005 \001(\003" + + "\022\r\n\005extra\030\006 \001(\t\"F\n\005Group\022\036\n\ngroup_info\030\001" + + " \002(\0132\n.GroupInfo\022\035\n\007members\030\002 \003(\0132\014.Grou" + + "pMember\"\313\001\n\013ChannelMenu\022\014\n\004type\030\001 \002(\t\022\014\n" + + "\004name\030\002 \002(\t\022\013\n\003key\030\003 \001(\t\022\013\n\003url\030\004 \001(\t\022\020\n" + + "\010media_id\030\005 \001(\t\022\022\n\narticle_id\030\006 \001(\t\022\016\n\006a", + "pp_id\030\007 \001(\t\022\020\n\010app_page\030\010 \001(\t\022\036\n\010sub_men" + + "u\030\t \003(\0132\014.ChannelMenu\022\017\n\007menu_id\030\n \001(\t\022\r" + + "\n\005extra\030\013 \001(\t\"-\n\017ChannelMenuList\022\032\n\004menu" + + "\030\001 \003(\0132\014.ChannelMenu\"\340\001\n\013ChannelInfo\022\021\n\t" + + "target_id\030\001 \001(\t\022\014\n\004name\030\002 \002(\t\022\020\n\010portrai" + + "t\030\003 \001(\t\022\r\n\005owner\030\004 \001(\t\022\016\n\006status\030\005 \001(\005\022\014" + + "\n\004desc\030\006 \001(\t\022\r\n\005extra\030\007 \001(\t\022\021\n\tupdate_dt" + + "\030\010 \001(\003\022\016\n\006secret\030\t \001(\t\022\020\n\010callback\030\n \001(\t" + + "\022\021\n\tautomatic\030\013 \001(\005\022\032\n\004menu\030\014 \003(\0132\014.Chan" + + "nelMenu\"D\n\021ModifyChannelInfo\022\022\n\nchannel_", + "id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022\r\n\005value\030\003 \002(\t\"8\n" + + "\017TransferChannel\022\022\n\nchannel_id\030\001 \002(\t\022\021\n\t" + + "new_owner\030\002 \002(\t\"3\n\017PullChannelInfo\022\022\n\nch" + + "annel_id\030\001 \002(\t\022\014\n\004head\030\002 \002(\003\"H\n\023PullChan" + + "nelListener\022\022\n\nchannel_id\030\001 \002(\t\022\016\n\006offse" + + "t\030\002 \002(\005\022\r\n\005count\030\003 \002(\005\"R\n\031PullChannelLis" + + "tenerResult\022\023\n\013total_count\030\001 \002(\005\022\016\n\006offs" + + "et\030\002 \002(\005\022\020\n\010listener\030\003 \003(\t\"3\n\rListenChan" + + "nel\022\022\n\nchannel_id\030\001 \002(\t\022\016\n\006listen\030\002 \002(\005\"" + + "E\n\023SearchChannelResult\022\035\n\007channel\030\001 \003(\0132", + "\014.ChannelInfo\022\017\n\007keyword\030\002 \002(\t\"\235\002\n\016Messa" + + "geContent\022\014\n\004type\030\001 \002(\005\022\032\n\022searchable_co" + + "ntent\030\002 \001(\t\022\024\n\014push_content\030\003 \001(\t\022\017\n\007con" + + "tent\030\004 \001(\t\022\014\n\004data\030\005 \001(\014\022\021\n\tmediaType\030\006 " + + "\001(\005\022\026\n\016remoteMediaUrl\030\007 \001(\t\022\024\n\014persist_f" + + "lag\030\010 \001(\005\022\027\n\017expire_duration\030\t \001(\005\022\026\n\016me" + + "ntioned_type\030\n \001(\005\022\030\n\020mentioned_target\030\013" + + " \003(\t\022\r\n\005extra\030\014 \001(\t\022\021\n\tpush_data\030\r \001(\t\"\226" + + "\001\n\025AddGroupMemberRequest\022\020\n\010group_id\030\001 \002" + + "(\t\022\"\n\014added_member\030\002 \003(\0132\014.GroupMember\022\017", + "\n\007to_line\030\003 \003(\005\022\'\n\016notify_content\030\004 \001(\0132" + + "\017.MessageContent\022\r\n\005extra\030\005 \001(\t\"{\n\022Creat" + + "eGroupRequest\022\025\n\005group\030\001 \002(\0132\006.Group\022\017\n\007" + + "to_line\030\002 \003(\005\022\'\n\016notify_content\030\003 \001(\0132\017." + + "MessageContent\022\024\n\014member_extra\030\004 \001(\t\"a\n\023" + + "DismissGroupRequest\022\020\n\010group_id\030\001 \002(\t\022\017\n" + + "\007to_line\030\002 \003(\005\022\'\n\016notify_content\030\003 \001(\0132\017" + + ".MessageContent\"\245\001\n\rFriendRequest\022\020\n\010fro" + + "m_uid\030\001 \001(\t\022\016\n\006to_uid\030\002 \002(\t\022\016\n\006reason\030\003 " + + "\002(\t\022\016\n\006status\030\004 \001(\005\022\021\n\tupdate_dt\030\005 \001(\003\022\030", + "\n\020from_read_status\030\006 \001(\010\022\026\n\016to_read_stat" + + "us\030\007 \001(\010\022\r\n\005extra\030\010 \001(\t\"#\n\rGeneralResult" + + "\022\022\n\nerror_code\030\001 \002(\005\"?\n\025GetUploadTokenRe" + + "quest\022\022\n\nmedia_type\030\001 \002(\005\022\022\n\nmedia_path\030" + + "\002 \002(\t\"S\n\024GetUploadTokenResult\022\016\n\006domain\030" + + "\001 \002(\t\022\r\n\005token\030\002 \002(\t\022\016\n\006server\030\003 \002(\t\022\014\n\004" + + "port\030\004 \001(\005\"H\n\023HandleFriendRequest\022\022\n\ntar" + + "get_uid\030\001 \002(\t\022\016\n\006status\030\002 \002(\005\022\r\n\005extra\030\003" + + " \001(\t\"\023\n\005IDBuf\022\n\n\002id\030\001 \002(\t\"\027\n\tIDListBuf\022\n" + + "\n\002id\030\001 \003(\t\"\256\001\n\007Message\022#\n\014conversation\030\001", + " \002(\0132\r.Conversation\022\021\n\tfrom_user\030\002 \002(\t\022 " + + "\n\007content\030\003 \002(\0132\017.MessageContent\022\022\n\nmess" + + "age_id\030\004 \001(\003\022\030\n\020server_timestamp\030\005 \001(\003\022\017" + + "\n\007to_user\030\006 \001(\t\022\n\n\002to\030\007 \003(\t\"\353\001\n\004User\022\013\n\003" + + "uid\030\001 \002(\t\022\014\n\004name\030\002 \001(\t\022\024\n\014display_name\030" + + "\003 \001(\t\022\020\n\010portrait\030\004 \001(\t\022\016\n\006mobile\030\005 \001(\t\022" + + "\r\n\005email\030\006 \001(\t\022\017\n\007address\030\007 \001(\t\022\017\n\007compa" + + "ny\030\010 \001(\t\022\r\n\005extra\030\t \001(\t\022\021\n\tupdate_dt\030\n \001" + + "(\003\022\016\n\006gender\030\013 \001(\005\022\016\n\006social\030\014 \001(\t\022\014\n\004ty" + + "pe\030\r \001(\005\022\017\n\007deleted\030\016 \001(\005\"c\n\005Robot\022\013\n\003ui", + "d\030\001 \002(\t\022\r\n\005state\030\002 \002(\005\022\r\n\005owner\030\003 \001(\t\022\016\n" + + "\006secret\030\004 \001(\t\022\020\n\010callback\030\005 \001(\t\022\r\n\005extra" + + "\030\006 \001(\t\"(\n\017GetRobotsResult\022\025\n\005entry\030\001 \003(\013" + + "2\006.Robot\"g\n\030UploadDeviceTokenRequest\022\020\n\010" + + "platform\030\001 \002(\005\022\020\n\010app_name\030\002 \002(\t\022\024\n\014devi" + + "ce_token\030\003 \002(\t\022\021\n\tpush_type\030\004 \002(\005\"\201\001\n\026Mo" + + "difyGroupInfoRequest\022\020\n\010group_id\030\001 \002(\t\022\014" + + "\n\004type\030\002 \002(\005\022\r\n\005value\030\003 \002(\t\022\017\n\007to_line\030\004" + + " \003(\005\022\'\n\016notify_content\030\005 \001(\0132\017.MessageCo" + + "ntent\"\203\001\n\026SetGroupManagerRequest\022\020\n\010grou", + "p_id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022\017\n\007user_id\030\003 \003(" + + "\t\022\017\n\007to_line\030\004 \003(\005\022\'\n\016notify_content\030\005 \001" + + "(\0132\017.MessageContent\"(\n\tInfoEntry\022\014\n\004type" + + "\030\001 \002(\005\022\r\n\005value\030\002 \002(\t\"0\n\023ModifyMyInfoReq" + + "uest\022\031\n\005entry\030\001 \003(\0132\n.InfoEntry\";\n\rNotif" + + "yMessage\022\014\n\004type\030\001 \002(\005\022\014\n\004head\030\002 \002(\003\022\016\n\006" + + "target\030\003 \001(\t\"=\n\022PullMessageRequest\022\n\n\002id" + + "\030\001 \002(\003\022\014\n\004type\030\002 \002(\005\022\r\n\005delay\030\003 \001(\003\"M\n\021P" + + "ullMessageResult\022\031\n\007message\030\001 \003(\0132\010.Mess" + + "age\022\017\n\007current\030\002 \002(\003\022\014\n\004head\030\003 \002(\003\"/\n\023Pu", + "llGroupInfoResult\022\030\n\004info\030\001 \003(\0132\n.GroupI" + + "nfo\"6\n\026PullGroupMemberRequest\022\016\n\006target\030" + + "\001 \002(\t\022\014\n\004head\030\002 \002(\003\"5\n\025PullGroupMemberRe" + + "sult\022\034\n\006member\030\001 \003(\0132\014.GroupMember\"-\n\013Us" + + "erRequest\022\013\n\003uid\030\001 \002(\t\022\021\n\tupdate_dt\030\002 \001(" + + "\003\"0\n\017PullUserRequest\022\035\n\007request\030\001 \003(\0132\014." + + "UserRequest\"/\n\nUserResult\022\023\n\004user\030\001 \002(\0132" + + "\005.User\022\014\n\004code\030\002 \002(\005\"-\n\016PullUserResult\022\033" + + "\n\006result\030\001 \003(\0132\013.UserResult\"^\n\020QuitGroup" + + "Request\022\020\n\010group_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003", + "(\005\022\'\n\016notify_content\030\003 \001(\0132\017.MessageCont" + + "ent\"~\n\030RemoveGroupMemberRequest\022\020\n\010group" + + "_id\030\001 \002(\t\022\026\n\016removed_member\030\002 \003(\t\022\017\n\007to_" + + "line\030\003 \003(\005\022\'\n\016notify_content\030\004 \001(\0132\017.Mes" + + "sageContent\"u\n\024TransferGroupRequest\022\020\n\010g" + + "roup_id\030\001 \002(\t\022\021\n\tnew_owner\030\002 \002(\t\022\017\n\007to_l" + + "ine\030\003 \003(\005\022\'\n\016notify_content\030\004 \001(\0132\017.Mess" + + "ageContent\"\206\001\n\026ModifyGroupMemberAlias\022\020\n" + + "\010group_id\030\001 \002(\t\022\r\n\005alias\030\002 \002(\t\022\017\n\007to_lin" + + "e\030\003 \003(\005\022\'\n\016notify_content\030\004 \001(\0132\017.Messag", + "eContent\022\021\n\tmember_id\030\005 \001(\t\"\206\001\n\026ModifyGr" + + "oupMemberExtra\022\020\n\010group_id\030\001 \002(\t\022\017\n\007to_l" + + "ine\030\002 \003(\005\022\'\n\016notify_content\030\003 \001(\0132\017.Mess" + + "ageContent\022\r\n\005extra\030\004 \001(\t\022\021\n\tmember_id\030\005" + + " \001(\t\"P\n\020UserSettingEntry\022\r\n\005scope\030\001 \002(\005\022" + + "\013\n\003key\030\002 \002(\t\022\r\n\005value\030\003 \002(\t\022\021\n\tupdate_dt" + + "\030\004 \002(\003\"A\n\024ModifyUserSettingReq\022\r\n\005scope\030" + + "\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005value\030\003 \002(\t\"\032\n\007Ver" + + "sion\022\017\n\007version\030\001 \002(\003\"8\n\024GetUserSettingR" + + "esult\022 \n\005entry\030\001 \003(\0132\021.UserSettingEntry\"", + "f\n\006Friend\022\013\n\003uid\030\001 \002(\t\022\r\n\005state\030\002 \002(\005\022\021\n" + + "\tupdate_dt\030\003 \002(\003\022\r\n\005alias\030\004 \001(\t\022\017\n\007black" + + "ed\030\005 \001(\005\022\r\n\005extra\030\006 \001(\t\"*\n\020GetFriendsRes" + + "ult\022\026\n\005entry\030\001 \003(\0132\007.Friend\"7\n\026GetFriend" + + "RequestResult\022\035\n\005entry\030\001 \003(\0132\016.FriendReq" + + "uest\"\243\001\n\021ConnectAckPayload\022\020\n\010msg_head\030\001" + + " \001(\003\022\023\n\013friend_head\030\002 \001(\003\022\026\n\016friend_rq_h" + + "ead\030\003 \001(\003\022\024\n\014setting_head\030\004 \001(\003\022\021\n\tnode_" + + "addr\030\005 \001(\t\022\021\n\tnode_port\030\006 \001(\005\022\023\n\013server_" + + "time\030\007 \001(\003\"P\n\rIMHttpWrapper\022\r\n\005token\030\001 \002", + "(\t\022\021\n\tclient_id\030\002 \002(\t\022\017\n\007request\030\003 \002(\t\022\014" + + "\n\004data\030\004 \001(\014\"A\n\021SearchUserRequest\022\017\n\007key" + + "word\030\001 \002(\t\022\r\n\005fuzzy\030\002 \001(\005\022\014\n\004page\030\003 \001(\005\"" + + "(\n\020SearchUserResult\022\024\n\005entry\030\001 \003(\0132\005.Use" + + "r\"@\n\026GetChatroomInfoRequest\022\023\n\013chatroom_" + + "id\030\001 \002(\t\022\021\n\tupdate_dt\030\002 \001(\003\"\227\001\n\014Chatroom" + + "Info\022\r\n\005title\030\001 \002(\t\022\014\n\004desc\030\002 \001(\t\022\020\n\010por" + + "trait\030\003 \001(\t\022\024\n\014member_count\030\004 \001(\005\022\021\n\tcre" + + "ate_dt\030\005 \001(\003\022\021\n\tupdate_dt\030\006 \001(\003\022\r\n\005extra" + + "\030\007 \001(\t\022\r\n\005state\030\010 \001(\005\"F\n\034GetChatroomMemb", + "erInfoRequest\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tma" + + "x_count\030\002 \001(\005\";\n\022ChatroomMemberInfo\022\024\n\014m" + + "ember_count\030\001 \001(\005\022\017\n\007members\030\002 \003(\t\"\026\n\010IN" + + "T64Buf\022\n\n\002id\030\001 \002(\003\"4\n\023NotifyRecallMessag" + + "e\022\n\n\002id\030\001 \002(\003\022\021\n\tfrom_user\030\002 \002(\t\"/\n\020Blac" + + "kUserRequest\022\013\n\003uid\030\001 \002(\t\022\016\n\006status\030\002 \002(" + + "\005\"\323\001\n\014RouteRequest\022\013\n\003app\030\001 \001(\t\022\020\n\010platf" + + "orm\030\002 \001(\005\022\021\n\tpush_type\030\003 \001(\005\022\023\n\013device_n" + + "ame\030\004 \001(\t\022\026\n\016device_version\030\005 \001(\t\022\022\n\npho" + + "ne_name\030\006 \001(\t\022\020\n\010language\030\007 \001(\t\022\024\n\014carri", + "er_name\030\010 \001(\t\022\023\n\013app_version\030\t \001(\t\022\023\n\013sd" + + "k_version\030\n \001(\t\"D\n\rRouteResponse\022\014\n\004host" + + "\030\001 \002(\t\022\021\n\tlong_port\030\002 \002(\005\022\022\n\nshort_port\030" + + "\003 \002(\005\"G\n\017GetTokenRequest\022\017\n\007user_id\030\001 \002(" + + "\t\022\021\n\tclient_id\030\002 \002(\t\022\020\n\010platform\030\003 \001(\005\"r" + + "\n\022LoadRemoteMessages\022#\n\014conversation\030\001 \002" + + "(\0132\r.Conversation\022\022\n\nbefore_uid\030\002 \002(\003\022\r\n" + + "\005count\030\003 \002(\005\022\024\n\014content_type\030\004 \003(\005\"a\n\020Mu" + + "ltiCastMessage\022\021\n\tfrom_user\030\001 \002(\t\022 \n\007con" + + "tent\030\002 \002(\0132\017.MessageContent\022\n\n\002to\030\003 \003(\t\022", + "\014\n\004line\030\004 \002(\005\"E\n\035RecallMultiCastMessageR" + + "equest\022\022\n\nmessage_id\030\001 \002(\003\022\020\n\010receiver\030\002" + + " \003(\t\"@\n\017AuthCodeRequest\022\021\n\ttarget_id\030\001 \002" + + "(\t\022\014\n\004type\030\002 \002(\005\022\014\n\004host\030\003 \002(\t\"o\n\030Applic" + + "ationConfigRequest\022\r\n\005appId\030\001 \002(\t\022\017\n\007app" + + "Type\030\002 \002(\005\022\021\n\ttimestamp\030\003 \002(\003\022\r\n\005nonce\030\004" + + " \002(\t\022\021\n\tsignature\030\005 \002(\tB/\n\025cn.wildfirech" + + "at.protoB\nWFCMessageZ\n./go;proto" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -67502,7 +67583,7 @@ public final class WFCMessage { internal_static_GroupInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_GroupInfo_descriptor, - new java.lang.String[] { "TargetId", "Name", "Portrait", "Owner", "Type", "MemberCount", "Extra", "UpdateDt", "MemberUpdateDt", "Mute", "JoinType", "PrivateChat", "Searchable", "MaxMemberCount", "HistoryMessage", "SuperGroup", }); + new java.lang.String[] { "TargetId", "Name", "Portrait", "Owner", "Type", "MemberCount", "Extra", "UpdateDt", "MemberUpdateDt", "Mute", "JoinType", "PrivateChat", "Searchable", "MaxMemberCount", "HistoryMessage", "SuperGroup", "Deleted", }); internal_static_GroupMember_descriptor = getDescriptor().getMessageTypes().get(3); internal_static_GroupMember_fieldAccessorTable = new diff --git a/distribution/src/main/resources/wildfirechat.conf b/distribution/src/main/resources/wildfirechat.conf index 3509e295..5edeef73 100755 --- a/distribution/src/main/resources/wildfirechat.conf +++ b/distribution/src/main/resources/wildfirechat.conf @@ -203,6 +203,9 @@ group.visible_quit_or_kickoff_notification 0 ## 是否禁止陌生人拉人入群,默认为false group.disable_stranger_invite false +## 群组信息是否标记删除 +group.enable_mark_deletion false + ## 隐藏用户信息属性类型,2是性别,3是电话号码,4是邮箱,5是地址,6是公司信息,7是社交账号,8是Extra信息。当需要隐藏多个时以英文逗号分开; ## 本配置是为了提高安全性,避免把对应信息同步到客户端,这样就能防止程序被破解从而拿到用户关键信息。仅对客户端有效,server api不受影响。 ## 注意,修改本配置不会对已经同步的信息产生影响。