discord-protos 1.2.101 → 1.2.117

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.gitattributes +1 -0
  2. package/.github/workflows/update.yml +23 -12
  3. package/.prettierrc.yml +3 -3
  4. package/LICENSE +21 -21
  5. package/MANIFEST.in +1 -1
  6. package/README.md +12 -23
  7. package/__pycache__/PreloadedUserSettings_pb2.cpython-311.pyc +0 -0
  8. package/discord_protos/__init__.py +3 -1
  9. package/discord_protos/discord_experimentation/__init__.py +0 -0
  10. package/discord_protos/discord_experimentation/v1/Experiment.proto +22 -0
  11. package/discord_protos/discord_experimentation/v1/Experiment_pb2.py +108 -100
  12. package/discord_protos/discord_experimentation/v1/__init__.py +0 -0
  13. package/discord_protos/discord_kkv_store_value_models/__init__.py +0 -0
  14. package/discord_protos/discord_kkv_store_value_models/v1/__init__.py +0 -0
  15. package/discord_protos/discord_users/__init__.py +0 -0
  16. package/discord_protos/discord_users/v1/PreloadedUserSettings.proto +13 -0
  17. package/discord_protos/discord_users/v1/PreloadedUserSettings_pb2.py +111 -109
  18. package/discord_protos/discord_users/v1/__init__.py +0 -0
  19. package/discord_protos/premium_marketing/__init__.py +0 -0
  20. package/discord_protos/premium_marketing/v1/__init__.py +0 -0
  21. package/discord_protos/users/__init__.py +0 -0
  22. package/discord_protos/users/v1/User.proto +498 -0
  23. package/discord_protos/users/v1/UserData.proto +503 -0
  24. package/discord_protos/users/v1/UserData_pb2.py +77 -73
  25. package/discord_protos/users/v1/User_pb2.py +35 -33
  26. package/discord_protos/users/v1/__init__.py +0 -0
  27. package/discord_protos.egg-info/PKG-INFO +127 -0
  28. package/dist/load.js +83 -21
  29. package/package.json +32 -34
  30. package/pnpm-workspace.yaml +2 -0
  31. package/pyproject.toml +21 -21
  32. package/requirements.txt +1 -1
  33. package/scripts/preload.js +17 -17
  34. package/setup.py +4 -2
  35. package/tsconfig.script.json +12 -0
  36. package/dist/discord_protos/discord_experimentation/v1/Experiment.d.ts +0 -1455
  37. package/dist/discord_protos/discord_experimentation/v1/Experiment.js +0 -3105
  38. package/dist/discord_protos/discord_kkv_store_value_models/v1/AcknowledgedApplicationDisclosures.d.ts +0 -71
  39. package/dist/discord_protos/discord_kkv_store_value_models/v1/AcknowledgedApplicationDisclosures.js +0 -131
  40. package/dist/discord_protos/discord_kkv_store_value_models/v1/ApplicationUserRoleConnection.d.ts +0 -41
  41. package/dist/discord_protos/discord_kkv_store_value_models/v1/ApplicationUserRoleConnection.js +0 -94
  42. package/dist/discord_protos/discord_users/v1/FrecencyUserSettings.d.ts +0 -421
  43. package/dist/discord_protos/discord_users/v1/FrecencyUserSettings.js +0 -1077
  44. package/dist/discord_protos/discord_users/v1/PreloadedUserSettings.d.ts +0 -2270
  45. package/dist/discord_protos/discord_users/v1/PreloadedUserSettings.js +0 -4688
  46. package/dist/discord_protos/google/protobuf/timestamp.d.ts +0 -155
  47. package/dist/discord_protos/google/protobuf/timestamp.js +0 -135
  48. package/dist/discord_protos/google/protobuf/wrappers.d.ts +0 -307
  49. package/dist/discord_protos/google/protobuf/wrappers.js +0 -611
  50. package/dist/discord_protos/premium_marketing/v1/PremiumMarketingComponentProperties.d.ts +0 -853
  51. package/dist/discord_protos/premium_marketing/v1/PremiumMarketingComponentProperties.js +0 -1839
  52. package/dist/discord_protos/users/v1/GuildShardingConfig.d.ts +0 -26
  53. package/dist/discord_protos/users/v1/GuildShardingConfig.js +0 -62
  54. package/dist/discord_protos/users/v1/MediumUser.d.ts +0 -55
  55. package/dist/discord_protos/users/v1/MediumUser.js +0 -108
  56. package/dist/discord_protos/users/v1/User.d.ts +0 -552
  57. package/dist/discord_protos/users/v1/User.js +0 -989
  58. package/dist/discord_protos/users/v1/UserData.d.ts +0 -829
  59. package/dist/discord_protos/users/v1/UserData.js +0 -1554
  60. package/dist/index.d.ts +0 -16
  61. package/dist/index.js +0 -62
package/.gitattributes ADDED
@@ -0,0 +1 @@
1
+ * text=auto eol=lf
@@ -20,11 +20,14 @@ jobs:
20
20
  with:
21
21
  ref: ${{ github.head_ref }}
22
22
 
23
+ - name: Install pnpm
24
+ uses: pnpm/action-setup@v2
25
+
23
26
  - name: Install Node.js
24
27
  uses: actions/setup-node@v4
25
28
  with:
26
- node-version: '23.11.1'
27
- registry-url: 'https://registry.npmjs.org'
29
+ node-version: 23
30
+ cache: 'pnpm'
28
31
 
29
32
  - name: Install protoc
30
33
  uses: arduino/setup-protoc@v3
@@ -32,21 +35,16 @@ jobs:
32
35
  version: '28.x'
33
36
 
34
37
  - name: Install dependencies
35
- run: npm install
38
+ run: pnpm install --frozen-lockfile
36
39
 
37
40
  - name: Load protobuf definitions
38
41
  run: |
39
42
  # Fix puppeteer on Ubuntu 23.10+
40
43
  # See https://github.com/puppeteer/puppeteer/issues/12818
41
44
  echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns
42
- npm run load
45
+ pnpm load
43
46
  shell: bash
44
47
 
45
- - name: Build protobuf definitions
46
- run: |
47
- npm run js
48
- npm run py
49
-
50
48
  - name: Commit changes
51
49
  id: changes
52
50
  run: |
@@ -63,8 +61,21 @@ jobs:
63
61
  env:
64
62
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
65
63
 
64
+ - name: Install Python
65
+ if: steps.changes.outputs.has_changes == 'true'
66
+ uses: actions/setup-python@v4
67
+ with:
68
+ python-version: '3.11'
69
+
70
+ - name: Build package
71
+ run: |
72
+ rm -rf dist
73
+ python -m pip install -U pip build
74
+ python -m build
75
+
76
+ - name: Publish to PyPI
77
+ uses: pypa/gh-action-pypi-publish@release/v1
78
+
66
79
  - name: Publish to NPM
67
80
  if: steps.changes.outputs.has_changes == 'true'
68
- run: npm publish --provenance --access public
69
- env:
70
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
81
+ run: pnpm publish --provenance --access public --no-git-checks
package/.prettierrc.yml CHANGED
@@ -1,4 +1,4 @@
1
- trailingComma: "all"
2
- tabWidth: 4
3
- maxLineLength: 120
1
+ trailingComma: "all"
2
+ tabWidth: 4
3
+ maxLineLength: 120
4
4
  printWidth: 140
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2022-present dolfies
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2022-present dolfies
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/MANIFEST.in CHANGED
@@ -1,4 +1,4 @@
1
1
  include README.md
2
2
  include LICENSE
3
3
  include requirements.txt
4
- include discord_protos/*.proto
4
+ include discord_protos/**/**/*.proto
package/README.md CHANGED
@@ -5,18 +5,12 @@ This repository provides protocol buffer files for all protobufs found in Discor
5
5
 
6
6
  These protobufs are used by Discord clients for transmitting data like user settings and premium marketing.
7
7
 
8
- Provided for educational purposes only.
9
-
10
- ### Credits
11
-
12
- - [arHSM](https://github.com/arHSM) for originally reverse-engineering the technology behind Discord's protobuf implementation.
13
-
14
8
  ## Usage
15
9
 
16
- ### Note
17
- Automating user accounts is against the Discord ToS. This repository is a proof of concept and I cannot recommend using it. Do so at your own risk.
18
-
19
10
  ### Installation
11
+
12
+ Note: These packages are automatically updated when changes are detected in the protobufs. As Discord often updates their protobufs, pinning to a specific version may be advisable.
13
+
20
14
  ```
21
15
  # with npm
22
16
  npm install discord-protos
@@ -46,6 +40,7 @@ const encoded = PreloadedUserSettings.toBase64({
46
40
  emojiId: 0n,
47
41
  emojiName: "",
48
42
  expiresAtMs: 0n,
43
+ createdAtMs: 0n,
49
44
  },
50
45
  },
51
46
  });
@@ -58,26 +53,24 @@ console.log(encoded, decoded);
58
53
  Python:
59
54
  ```py
60
55
  import base64
56
+
57
+ from google.protobuf.json_format import ParseDict
61
58
  from discord_protos import PreloadedUserSettings
62
59
 
63
60
  settings = PreloadedUserSettings()
64
- encoded = base64.b64encode(settings.ParseDict({
61
+ payload = ParseDict({
65
62
  'status': {
66
- 'status': {
67
- 'value': 'online',
68
- },
63
+ 'status': 'online',
69
64
  'custom_status': {
70
65
  'text': 'Hello World',
71
- 'emoji_id': 0,
72
- 'emoji_name': '',
73
- 'expires_at_ms': 0,
74
66
  },
75
67
  },
76
- }).SerializeToString())
68
+ }, settings).SerializeToString()
77
69
 
70
+ encoded = base64.b64encode(payload).decode('ascii')
78
71
  decoded = PreloadedUserSettings.FromString(base64.b64decode(encoded))
79
72
 
80
- print(encoded, decoded)
73
+ print(encoded, decoded, sep='\n')
81
74
  ```
82
75
 
83
76
  The following table shows which protobuf user settings correspond to which .proto file (the Python package also provides a `UserSettingsType` enum for convenience).
@@ -88,11 +81,7 @@ The following table shows which protobuf user settings correspond to which .prot
88
81
  | 2 | `FRECENCY_AND_FAVORITES_SETTINGS` | FrecencyUserSettings.proto | Frecency and favorites storage for various things. |
89
82
  | 3 | `TEST_SETTINGS` | - | Unknown. |
90
83
 
91
- Base64-encoded data for these protobufs are provided by the `GET /users/@me/settings-proto/{type}` endpoint. For preloaded user settings, base64-encoded data is provided in the `user_settings_proto` key of the `READY` event received in the Discord Gateway, as well as in `USER_SETTINGS_PROTO_UPDATE` events.
92
-
93
- ### Protobufs
94
- The .proto files can be compiled down to Python or JavaScript files by running `npm run py` or `npm run js`. This requires protoc to be installed.
95
-
84
+ See [Userdoccers](https://docs.discord.food/resources/user-settings-proto) for more information.
96
85
 
97
86
  ### Development
98
87
  Running `pnpm load` will extract and save the latest protobufs to the `discord_protos/` directory.
@@ -1,9 +1,11 @@
1
+ # This file is auto-generated by src/load.ts. Do not edit manually.
2
+
1
3
  from __future__ import annotations
2
4
 
3
5
  from enum import Enum as _Enum
4
6
  from typing import TYPE_CHECKING
5
7
 
6
- __version__ = '1.2.101'
8
+ __version__ = '1.2.117'
7
9
 
8
10
  if TYPE_CHECKING:
9
11
  from google.protobuf.message import Message as _Message
@@ -11,6 +11,7 @@ message Experiment {
11
11
  UNIT_TYPE_USER = 1;
12
12
  UNIT_TYPE_INSTALLATION = 2;
13
13
  UNIT_TYPE_GUILD = 3;
14
+ UNIT_TYPE_CUSTOM = 4;
14
15
  }
15
16
 
16
17
  enum Type {
@@ -215,6 +216,16 @@ message Experiment {
215
216
  repeated string features = 1 [packed = false];
216
217
  }
217
218
 
219
+ message UserLocation {
220
+ repeated Location locations = 1;
221
+ bool prefer_client_ip = 2;
222
+ }
223
+
224
+ message UserIP {
225
+ repeated string blocks = 1 [packed = false];
226
+ bool prefer_client_ip = 2;
227
+ }
228
+
218
229
  message Filter {
219
230
  oneof filter {
220
231
  ClientPlatform client_version = 2;
@@ -240,6 +251,8 @@ message Experiment {
240
251
  GuildIds guild_ids = 22;
241
252
  GuildMemberCountRange guild_member_count_range = 25;
242
253
  GuildHasFeature guild_has_feature = 26;
254
+ UserLocation user_location = 27;
255
+ UserIP user_ip = 28;
243
256
  }
244
257
  }
245
258
 
@@ -276,6 +289,8 @@ message Experiment {
276
289
  SURFACE_DEVELOPER_PORTAL = 3;
277
290
  SURFACE_ADMIN_PANEL = 4;
278
291
  SURFACE_ADS_BUDGET_AB = 5;
292
+ SURFACE_AV_WORKER = 6;
293
+ SURFACE_SEO = 7;
279
294
  }
280
295
 
281
296
  enum ExposureTracking {
@@ -299,6 +314,11 @@ message Experiment {
299
314
  double decision_log_sample_rate = 6;
300
315
  }
301
316
 
317
+ enum CustomUnitPrefix {
318
+ CUSTOM_UNIT_PREFIX_UNSPECIFIED = 0;
319
+ CUSTOM_UNIT_PREFIX_SEO_URL_SLUG = 1;
320
+ }
321
+
302
322
  fixed64 id = 1;
303
323
  string name = 2;
304
324
  optional google.protobuf.Timestamp created_at = 3;
@@ -332,4 +352,6 @@ message Experiment {
332
352
  optional google.protobuf.Timestamp expected_end_date = 31;
333
353
  bool is_automated_change = 32;
334
354
  optional google.protobuf.Timestamp archive_at = 33;
355
+ optional google.protobuf.Int32Value guild_experiment_version = 35;
356
+ CustomUnitPrefix custom_unit_prefix = 36;
335
357
  }
@@ -26,7 +26,7 @@ from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb
26
26
  from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
27
27
 
28
28
 
29
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+discord_experimentation/v1/Experiment.proto\x12)discord_protos.discord_experimentation.v1\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xd9P\n\nExperiment\x12\n\n\x02id\x18\x01 \x01(\x06\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x33\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x12\n\ncreator_id\x18\x04 \x01(\x06\x12\x0f\n\x07version\x18\x05 \x01(\x05\x12\x32\n\tedited_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12\x11\n\teditor_id\x18\x07 \x01(\x06\x12\r\n\x05title\x18\x08 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\t \x01(\t\x12\x35\n\nhypothesis\x18\n \x01(\x0b\x32\x1c.google.protobuf.StringValueH\x02\x88\x01\x01\x12\x39\n\x0etech_spec_link\x18\x0b \x01(\x0b\x32\x1c.google.protobuf.StringValueH\x03\x88\x01\x01\x12\x10\n\x08revision\x18\x0c \x01(\x05\x12\x10\n\x08hash_key\x18\r \x01(\t\x12Q\n\tunit_type\x18\x0e \x01(\x0e\x32>.discord_protos.discord_experimentation.v1.Experiment.UnitType\x12S\n\nvariations\x18\x0f \x03(\x0b\x32?.discord_protos.discord_experimentation.v1.Experiment.Variation\x12I\n\x05rules\x18\x10 \x03(\x0b\x32:.discord_protos.discord_experimentation.v1.Experiment.Rule\x12J\n\x05phase\x18\x12 \x01(\x0e\x32;.discord_protos.discord_experimentation.v1.Experiment.Phase\x12O\n\x08surfaces\x18\x13 \x03(\x0e\x32=.discord_protos.discord_experimentation.v1.Experiment.Surface\x12\x16\n\x0eowning_team_id\x18\x14 \x01(\t\x12&\n\x1e\x63\x61\x63hed_notification_channel_id\x18\x15 \x01(\x06\x12\x61\n\x11\x65xposure_tracking\x18\x16 \x01(\x0e\x32\x46.discord_protos.discord_experimentation.v1.Experiment.ExposureTracking\x12]\n\x0f\x61ssignment_mode\x18\x19 \x01(\x0e\x32\x44.discord_protos.discord_experimentation.v1.Experiment.AssignmentMode\x12\x1f\n\x17\x65nable_edit_raw_json_ui\x18\x17 \x01(\x08\x12\x1c\n\x14winning_variation_id\x18\x18 \x01(\x05\x12\x1d\n\x15\x65xtra_outcome_context\x18\" \x01(\t\x12H\n\x04type\x18\x1a \x01(\x0e\x32:.discord_protos.discord_experimentation.v1.Experiment.Type\x12\x13\n\x0bis_template\x18\x1b \x01(\x08\x12\x1d\n\x15\x66ield_numbers_to_copy\x18\x1c \x03(\x05\x12 \n\x14\x65ngine_feature_flags\x18\x1d \x03(\tB\x02\x10\x00\x12\\\n\x0c\x64\x65\x62ug_config\x18\x1e \x01(\x0b\x32\x41.discord_protos.discord_experimentation.v1.Experiment.DebugConfigH\x04\x88\x01\x01\x12:\n\x11\x65xpected_end_date\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05\x88\x01\x01\x12\x1b\n\x13is_automated_change\x18 \x01(\x08\x12\x33\n\narchive_at\x18! \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x06\x88\x01\x01\x1ao\n\x06\x42ucket\x12\r\n\x05start\x18\x01 \x01(\x05\x12\x0c\n\x04stop\x18\x02 \x01(\x05\x12H\n\x04type\x18\x03 \x01(\x0e\x32:.discord_protos.discord_experimentation.v1.Experiment.Type\x1a\xa6\x02\n\tVariation\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05label\x18\x02 \x01(\t\x12\x19\n\x11target_allocation\x18\x03 \x01(\x05\x12M\n\x07\x62uckets\x18\x04 \x03(\x0b\x32<.discord_protos.discord_experimentation.v1.Experiment.Bucket\x12H\n\x04type\x18\x05 \x01(\x0e\x32:.discord_protos.discord_experimentation.v1.Experiment.Type\x12\x38\n\rconfiguration\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueH\x00\x88\x01\x01\x42\x10\n\x0e_configuration\x1a\xa1\x01\n\x18PlatformVersionSpecifier\x12\r\n\x05major\x18\x01 \x01(\r\x12\x30\n\x05minor\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x00\x88\x01\x01\x12\x30\n\x05\x62uild\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt64ValueH\x01\x88\x01\x01\x42\x08\n\x06_minorB\x08\n\x06_build\x1a\xa0\x01\n\x19PlatformVersionRangeBound\x12\x64\n\x07version\x18\x01 \x01(\x0b\x32N.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionSpecifierH\x00\x88\x01\x01\x12\x11\n\tinclusive\x18\x02 \x01(\x08\x42\n\n\x08_version\x1a\x8c\x02\n\x14PlatformVersionRange\x12i\n\x0blower_bound\x18\x01 \x01(\x0b\x32O.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionRangeBoundH\x00\x88\x01\x01\x12i\n\x0bupper_bound\x18\x02 \x01(\x0b\x32O.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionRangeBoundH\x01\x88\x01\x01\x42\x0e\n\x0c_lower_boundB\x0e\n\x0c_upper_bound\x1a\x8c\x01\n\x0fPlatformVersion\x12Z\n\x06ranges\x18\x01 \x03(\x0b\x32J.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionRange\x12\x1d\n\x15work_around_pyoto_bug\x18\x02 \x01(\x08\x1a\x46\n\x15\x43lientRequiredChanges\x12\x19\n\rcommit_hashes\x18\x01 \x03(\tB\x02\x10\x00\x12\x12\n\npr_numbers\x18\x02 \x03(\x05\x1a\x8f\x05\n\x0e\x43lientPlatform\x12_\n\x0bios_version\x18\x01 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionH\x00\x88\x01\x01\x12\x63\n\x0f\x61ndroid_version\x18\x02 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionH\x01\x88\x01\x01\x12_\n\x0bweb_version\x18\x03 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionH\x02\x88\x01\x01\x12\x62\n\x0enative_version\x18\x04 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionH\x03\x88\x01\x01\x12\x1c\n\x14\x61llow_non_native_web\x18\x06 \x01(\x08\x12q\n\x17\x63lient_required_changes\x18\x05 \x01(\x0b\x32K.discord_protos.discord_experimentation.v1.Experiment.ClientRequiredChangesH\x04\x88\x01\x01\x42\x0e\n\x0c_ios_versionB\x12\n\x10_android_versionB\x0e\n\x0c_web_versionB\x11\n\x0f_native_versionB\x1a\n\x18_client_required_changes\x1a&\n\x13SDKVersionSpecifier\x12\x0f\n\x07version\x18\x01 \x01(\x05\x1a\x96\x01\n\x14SDKVersionRangeBound\x12_\n\x07version\x18\x01 \x01(\x0b\x32I.discord_protos.discord_experimentation.v1.Experiment.SDKVersionSpecifierH\x00\x88\x01\x01\x12\x11\n\tinclusive\x18\x02 \x01(\x08\x42\n\n\x08_version\x1a\xfd\x01\n\x0fSDKVersionRange\x12\x64\n\x0blower_bound\x18\x01 \x01(\x0b\x32J.discord_protos.discord_experimentation.v1.Experiment.SDKVersionRangeBoundH\x00\x88\x01\x01\x12\x64\n\x0bupper_bound\x18\x02 \x01(\x0b\x32J.discord_protos.discord_experimentation.v1.Experiment.SDKVersionRangeBoundH\x01\x88\x01\x01\x42\x0e\n\x0c_lower_boundB\x0e\n\x0c_upper_bound\x1a\x82\x01\n\nSDKVersion\x12U\n\x06ranges\x18\x01 \x03(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.SDKVersionRange\x12\x1d\n\x15work_around_pyoto_bug\x18\x02 \x01(\x08\x1a\xb5\x06\n\x15\x43lientOperatingSystem\x12Z\n\x0bios_version\x18\x01 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x00\x88\x01\x01\x12^\n\x0f\x61ndroid_version\x18\x02 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x01\x88\x01\x01\x12\\\n\rmacos_version\x18\x03 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x02\x88\x01\x01\x12^\n\x0fwindows_version\x18\x04 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x03\x88\x01\x01\x12\x62\n\x13playstation_version\x18\x05 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x04\x88\x01\x01\x12[\n\x0cxbox_version\x18\x06 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x05\x88\x01\x01\x12\\\n\rlinux_version\x18\x07 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x06\x88\x01\x01\x42\x0e\n\x0c_ios_versionB\x12\n\x10_android_versionB\x10\n\x0e_macos_versionB\x12\n\x10_windows_versionB\x16\n\x14_playstation_versionB\x0f\n\r_xbox_versionB\x10\n\x0e_linux_version\x1a>\n\nStaffUsers\x12\x15\n\rwork_accounts\x18\x01 \x01(\x08\x12\x19\n\x11personal_accounts\x18\x02 \x01(\x08\x1a \n\x0bUserInGuild\x12\x11\n\tguild_ids\x18\x01 \x03(\x06\x1a\x1b\n\x07UserIds\x12\x10\n\x08user_ids\x18\x01 \x03(\x06\x1a#\n\x0c\x43lientLocale\x12\x13\n\x07locales\x18\x01 \x03(\tB\x02\x10\x00\x1a\x39\n\tISORegion\x12\x13\n\x0biso_country\x18\x01 \x01(\t\x12\x17\n\x0fiso_subdivision\x18\x02 \x01(\t\x1a;\n\x05Place\x12\x0c\n\x04\x63ity\x18\x01 \x01(\t\x12\x13\n\x0bsubdivision\x18\x02 \x01(\t\x12\x0f\n\x07\x63ountry\x18\x03 \x01(\t\x1a\xcc\x01\n\x08Location\x12U\n\niso_region\x18\x01 \x01(\x0b\x32?.discord_protos.discord_experimentation.v1.Experiment.ISORegionH\x00\x12\x0f\n\x05is_eu\x18\x02 \x01(\x08H\x00\x12L\n\x05place\x18\x03 \x01(\x0b\x32;.discord_protos.discord_experimentation.v1.Experiment.PlaceH\x00\x42\n\n\x08location\x1a\x63\n\x0e\x43lientLocation\x12Q\n\tlocations\x18\x01 \x03(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.Location\x1a\x1e\n\x08\x43lientIP\x12\x12\n\x06\x62locks\x18\x01 \x03(\tB\x02\x10\x00\x1a!\n\nUserLocale\x12\x13\n\x07locales\x18\x01 \x03(\tB\x02\x10\x00\x1a\x1b\n\tUserIsBot\x12\x0e\n\x06is_bot\x18\x01 \x01(\x08\x1a\xa6\x01\n\x0cUserAgeRange\x12\x38\n\rmin_age_years\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x00\x88\x01\x01\x12\x38\n\rmax_age_years\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x01\x88\x01\x01\x42\x10\n\x0e_min_age_yearsB\x10\n\x0e_max_age_years\x1a\x1d\n\x0c\x46ixed64Value\x12\r\n\x05value\x18\x01 \x01(\x06\x1a\xd5\x01\n\x0bUserIDRange\x12W\n\x06min_id\x18\x01 \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.Fixed64ValueH\x00\x88\x01\x01\x12W\n\x06max_id\x18\x02 \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.Fixed64ValueH\x01\x88\x01\x01\x42\t\n\x07_min_idB\t\n\x07_max_id\x1a\x1b\n\x0bUserHasFlag\x12\x0c\n\x04mask\x18\x01 \x01(\x06\x1a`\n\x13UnitIdInRangeByHash\x12\x10\n\x08hash_key\x18\x01 \x01(\t\x12\x1a\n\x12stop_ring_position\x18\x02 \x01(\r\x12\x1b\n\x13start_ring_position\x18\x03 \x01(\r\x1a\x34\n\x14\x43lientReleaseChannel\x12\x1c\n\x10release_channels\x18\x01 \x03(\tB\x02\x10\x00\x1a\x17\n\x06\x41lways\x12\r\n\x05value\x18\x01 \x01(\x08\x1a)\n\x12\x43lientSystemLocale\x12\x13\n\x07locales\x18\x01 \x03(\tB\x02\x10\x00\x1a\x42\n\x12UnitIdInExperiment\x12\x15\n\rexperiment_id\x18\x01 \x01(\x06\x12\x15\n\rvariation_ids\x18\x02 \x03(\x05\x1a(\n\x0fUserPremiumType\x12\x15\n\rpremium_types\x18\x01 \x03(\x05\x1aY\n\x1bUnitIdMatchesFilterSnapshot\x12\x1c\n\x14\x66ilter_snapshot_name\x18\x01 \x01(\t\x12\x1c\n\x14target_filter_values\x18\x02 \x03(\x06\x1a\x1d\n\x08GuildIds\x12\x11\n\tguild_ids\x18\x01 \x03(\x06\x1a\x9f\x01\n\x15GuildMemberCountRange\x12\x34\n\tmin_count\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x00\x88\x01\x01\x12\x34\n\tmax_count\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x01\x88\x01\x01\x42\x0c\n\n_min_countB\x0c\n\n_max_count\x1a\'\n\x0fGuildHasFeature\x12\x14\n\x08\x66\x65\x61tures\x18\x01 \x03(\tB\x02\x10\x00\x1a\xb6\x11\n\x06\x46ilter\x12^\n\x0e\x63lient_version\x18\x02 \x01(\x0b\x32\x44.discord_protos.discord_experimentation.v1.Experiment.ClientPlatformH\x00\x12`\n\tclient_os\x18\x03 \x01(\x0b\x32K.discord_protos.discord_experimentation.v1.Experiment.ClientOperatingSystemH\x00\x12Q\n\x05staff\x18\x04 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.StaffUsersH\x00\x12Z\n\ruser_in_guild\x18\x05 \x01(\x0b\x32\x41.discord_protos.discord_experimentation.v1.Experiment.UserInGuildH\x00\x12Q\n\x08user_ids\x18\x06 \x01(\x0b\x32=.discord_protos.discord_experimentation.v1.Experiment.UserIdsH\x00\x12[\n\rclient_locale\x18\x07 \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.ClientLocaleH\x00\x12_\n\x0f\x63lient_location\x18\x08 \x01(\x0b\x32\x44.discord_protos.discord_experimentation.v1.Experiment.ClientLocationH\x00\x12S\n\tclient_ip\x18\t \x01(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.ClientIPH\x00\x12W\n\x0buser_locale\x18\n \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.UserLocaleH\x00\x12N\n\x03\x62ot\x18\x0b \x01(\x0b\x32?.discord_protos.discord_experimentation.v1.Experiment.UserIsBotH\x00\x12\\\n\x0euser_age_range\x18\x0c \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.UserAgeRangeH\x00\x12Z\n\ruser_id_range\x18\r \x01(\x0b\x32\x41.discord_protos.discord_experimentation.v1.Experiment.UserIDRangeH\x00\x12Z\n\ruser_has_flag\x18\x0e \x01(\x0b\x32\x41.discord_protos.discord_experimentation.v1.Experiment.UserHasFlagH\x00\x12m\n\x18unit_id_in_range_by_hash\x18\x0f \x01(\x0b\x32I.discord_protos.discord_experimentation.v1.Experiment.UnitIdInRangeByHashH\x00\x12l\n\x16\x63lient_release_channel\x18\x10 \x01(\x0b\x32J.discord_protos.discord_experimentation.v1.Experiment.ClientReleaseChannelH\x00\x12N\n\x06\x61lways\x18\x11 \x01(\x0b\x32<.discord_protos.discord_experimentation.v1.Experiment.AlwaysH\x00\x12h\n\x14\x63lient_system_locale\x18\x12 \x01(\x0b\x32H.discord_protos.discord_experimentation.v1.Experiment.ClientSystemLocaleH\x00\x12i\n\x15unit_id_in_experiment\x18\x13 \x01(\x0b\x32H.discord_protos.discord_experimentation.v1.Experiment.UnitIdInExperimentH\x00\x12\x62\n\x11user_premium_type\x18\x14 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.UserPremiumTypeH\x00\x12|\n\x1funit_id_matches_filter_snapshot\x18\x15 \x01(\x0b\x32Q.discord_protos.discord_experimentation.v1.Experiment.UnitIdMatchesFilterSnapshotH\x00\x12S\n\tguild_ids\x18\x16 \x01(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.GuildIdsH\x00\x12o\n\x18guild_member_count_range\x18\x19 \x01(\x0b\x32K.discord_protos.discord_experimentation.v1.Experiment.GuildMemberCountRangeH\x00\x12\x62\n\x11guild_has_feature\x18\x1a \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.GuildHasFeatureH\x00\x42\x08\n\x06\x66ilter\x1a \n\x08Override\x12\x14\n\x0cvariation_id\x18\x01 \x01(\x05\x1a\xeb\x02\n\x04Rule\x12H\n\x04type\x18\x01 \x01(\x0e\x32:.discord_protos.discord_experimentation.v1.Experiment.Type\x12M\n\x07\x66ilters\x18\x02 \x03(\x0b\x32<.discord_protos.discord_experimentation.v1.Experiment.Filter\x12U\n\x08override\x18\x03 \x01(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.OverrideH\x00\x88\x01\x01\x12\x16\n\x0eis_sunset_rule\x18\x04 \x01(\x08\x12N\n\x07subtype\x18\x05 \x01(\x0e\x32=.discord_protos.discord_experimentation.v1.Experiment.SubtypeB\x0b\n\t_override\x1a\xc2\x01\n\x0b\x44\x65\x62ugConfig\x12\x1f\n\x17\x65nable_decision_logging\x18\x01 \x01(\x08\x12\x1b\n\x13metrics_sample_rate\x18\x02 \x01(\x01\x12\x1e\n\x16log_context_on_failure\x18\x03 \x01(\x08\x12\x17\n\x0flog_raw_headers\x18\x04 \x01(\x08\x12\x1a\n\x12tag_filter_metrics\x18\x05 \x01(\x08\x12 \n\x18\x64\x65\x63ision_log_sample_rate\x18\x06 \x01(\x01\"j\n\x08UnitType\x12\x19\n\x15UNIT_TYPE_UNSPECIFIED\x10\x00\x12\x12\n\x0eUNIT_TYPE_USER\x10\x01\x12\x1a\n\x16UNIT_TYPE_INSTALLATION\x10\x02\x12\x13\n\x0fUNIT_TYPE_GUILD\x10\x03\"c\n\x04Type\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bTYPE_ACTIVE\x10\x01\x12\x0f\n\x0bTYPE_UNUSED\x10\x02\x12\x0f\n\x0bTYPE_BURNED\x10\x03\x12\x12\n\x0eTYPE_PRESERVED\x10\x04\"3\n\x07Subtype\x12\x13\n\x0fSUBTYPE_REGULAR\x10\x00\x12\x13\n\x0fSUBTYPE_HOLDOUT\x10\x01\"\x84\x01\n\x05Phase\x12\x15\n\x11PHASE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bPHASE_DRAFT\x10\x01\x12\x15\n\x11PHASE_MEASUREMENT\x10\x02\x12\x15\n\x11PHASE_ROLLING_OUT\x10\x04\x12\x12\n\x0ePHASE_ARCHIVED\x10\x06\x12\x11\n\rPHASE_AA_MODE\x10\x07\"\x96\x01\n\x07Surface\x12\x17\n\x13SURFACE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bSURFACE_API\x10\x01\x12\x0f\n\x0bSURFACE_APP\x10\x02\x12\x1c\n\x18SURFACE_DEVELOPER_PORTAL\x10\x03\x12\x17\n\x13SURFACE_ADMIN_PANEL\x10\x04\x12\x19\n\x15SURFACE_ADS_BUDGET_AB\x10\x05\"Q\n\x10\x45xposureTracking\x12\x1d\n\x19\x45XPOSURE_TRACKING_ENABLED\x10\x00\x12\x1e\n\x1a\x45XPOSURE_TRACKING_DISABLED\x10\x01\"\x8a\x01\n\x0e\x41ssignmentMode\x12\x18\n\x14\x41SSIGNMENT_MODE_FULL\x10\x00\x12!\n\x1d\x41SSIGNMENT_MODE_FORCE_CONTROL\x10\x03\x12\"\n\x1e\x41SSIGNMENT_MODE_OVERRIDES_ONLY\x10\x04\x12\x17\n\x13\x41SSIGNMENT_MODE_OFF\x10\x05\x42\r\n\x0b_created_atB\x0c\n\n_edited_atB\r\n\x0b_hypothesisB\x11\n\x0f_tech_spec_linkB\x0f\n\r_debug_configB\x14\n\x12_expected_end_dateB\r\n\x0b_archive_atb\x06proto3')
29
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+discord_experimentation/v1/Experiment.proto\x12)discord_protos.discord_experimentation.v1\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x9dV\n\nExperiment\x12\n\n\x02id\x18\x01 \x01(\x06\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x33\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x12\n\ncreator_id\x18\x04 \x01(\x06\x12\x0f\n\x07version\x18\x05 \x01(\x05\x12\x32\n\tedited_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12\x11\n\teditor_id\x18\x07 \x01(\x06\x12\r\n\x05title\x18\x08 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\t \x01(\t\x12\x35\n\nhypothesis\x18\n \x01(\x0b\x32\x1c.google.protobuf.StringValueH\x02\x88\x01\x01\x12\x39\n\x0etech_spec_link\x18\x0b \x01(\x0b\x32\x1c.google.protobuf.StringValueH\x03\x88\x01\x01\x12\x10\n\x08revision\x18\x0c \x01(\x05\x12\x10\n\x08hash_key\x18\r \x01(\t\x12Q\n\tunit_type\x18\x0e \x01(\x0e\x32>.discord_protos.discord_experimentation.v1.Experiment.UnitType\x12S\n\nvariations\x18\x0f \x03(\x0b\x32?.discord_protos.discord_experimentation.v1.Experiment.Variation\x12I\n\x05rules\x18\x10 \x03(\x0b\x32:.discord_protos.discord_experimentation.v1.Experiment.Rule\x12J\n\x05phase\x18\x12 \x01(\x0e\x32;.discord_protos.discord_experimentation.v1.Experiment.Phase\x12O\n\x08surfaces\x18\x13 \x03(\x0e\x32=.discord_protos.discord_experimentation.v1.Experiment.Surface\x12\x16\n\x0eowning_team_id\x18\x14 \x01(\t\x12&\n\x1e\x63\x61\x63hed_notification_channel_id\x18\x15 \x01(\x06\x12\x61\n\x11\x65xposure_tracking\x18\x16 \x01(\x0e\x32\x46.discord_protos.discord_experimentation.v1.Experiment.ExposureTracking\x12]\n\x0f\x61ssignment_mode\x18\x19 \x01(\x0e\x32\x44.discord_protos.discord_experimentation.v1.Experiment.AssignmentMode\x12\x1f\n\x17\x65nable_edit_raw_json_ui\x18\x17 \x01(\x08\x12\x1c\n\x14winning_variation_id\x18\x18 \x01(\x05\x12\x1d\n\x15\x65xtra_outcome_context\x18\" \x01(\t\x12H\n\x04type\x18\x1a \x01(\x0e\x32:.discord_protos.discord_experimentation.v1.Experiment.Type\x12\x13\n\x0bis_template\x18\x1b \x01(\x08\x12\x1d\n\x15\x66ield_numbers_to_copy\x18\x1c \x03(\x05\x12 \n\x14\x65ngine_feature_flags\x18\x1d \x03(\tB\x02\x10\x00\x12\\\n\x0c\x64\x65\x62ug_config\x18\x1e \x01(\x0b\x32\x41.discord_protos.discord_experimentation.v1.Experiment.DebugConfigH\x04\x88\x01\x01\x12:\n\x11\x65xpected_end_date\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05\x88\x01\x01\x12\x1b\n\x13is_automated_change\x18 \x01(\x08\x12\x33\n\narchive_at\x18! \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x06\x88\x01\x01\x12\x42\n\x18guild_experiment_version\x18# \x01(\x0b\x32\x1b.google.protobuf.Int32ValueH\x07\x88\x01\x01\x12\x62\n\x12\x63ustom_unit_prefix\x18$ \x01(\x0e\x32\x46.discord_protos.discord_experimentation.v1.Experiment.CustomUnitPrefix\x1ao\n\x06\x42ucket\x12\r\n\x05start\x18\x01 \x01(\x05\x12\x0c\n\x04stop\x18\x02 \x01(\x05\x12H\n\x04type\x18\x03 \x01(\x0e\x32:.discord_protos.discord_experimentation.v1.Experiment.Type\x1a\xa6\x02\n\tVariation\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05label\x18\x02 \x01(\t\x12\x19\n\x11target_allocation\x18\x03 \x01(\x05\x12M\n\x07\x62uckets\x18\x04 \x03(\x0b\x32<.discord_protos.discord_experimentation.v1.Experiment.Bucket\x12H\n\x04type\x18\x05 \x01(\x0e\x32:.discord_protos.discord_experimentation.v1.Experiment.Type\x12\x38\n\rconfiguration\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueH\x00\x88\x01\x01\x42\x10\n\x0e_configuration\x1a\xa1\x01\n\x18PlatformVersionSpecifier\x12\r\n\x05major\x18\x01 \x01(\r\x12\x30\n\x05minor\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x00\x88\x01\x01\x12\x30\n\x05\x62uild\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt64ValueH\x01\x88\x01\x01\x42\x08\n\x06_minorB\x08\n\x06_build\x1a\xa0\x01\n\x19PlatformVersionRangeBound\x12\x64\n\x07version\x18\x01 \x01(\x0b\x32N.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionSpecifierH\x00\x88\x01\x01\x12\x11\n\tinclusive\x18\x02 \x01(\x08\x42\n\n\x08_version\x1a\x8c\x02\n\x14PlatformVersionRange\x12i\n\x0blower_bound\x18\x01 \x01(\x0b\x32O.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionRangeBoundH\x00\x88\x01\x01\x12i\n\x0bupper_bound\x18\x02 \x01(\x0b\x32O.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionRangeBoundH\x01\x88\x01\x01\x42\x0e\n\x0c_lower_boundB\x0e\n\x0c_upper_bound\x1a\x8c\x01\n\x0fPlatformVersion\x12Z\n\x06ranges\x18\x01 \x03(\x0b\x32J.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionRange\x12\x1d\n\x15work_around_pyoto_bug\x18\x02 \x01(\x08\x1a\x46\n\x15\x43lientRequiredChanges\x12\x19\n\rcommit_hashes\x18\x01 \x03(\tB\x02\x10\x00\x12\x12\n\npr_numbers\x18\x02 \x03(\x05\x1a\x8f\x05\n\x0e\x43lientPlatform\x12_\n\x0bios_version\x18\x01 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionH\x00\x88\x01\x01\x12\x63\n\x0f\x61ndroid_version\x18\x02 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionH\x01\x88\x01\x01\x12_\n\x0bweb_version\x18\x03 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionH\x02\x88\x01\x01\x12\x62\n\x0enative_version\x18\x04 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.PlatformVersionH\x03\x88\x01\x01\x12\x1c\n\x14\x61llow_non_native_web\x18\x06 \x01(\x08\x12q\n\x17\x63lient_required_changes\x18\x05 \x01(\x0b\x32K.discord_protos.discord_experimentation.v1.Experiment.ClientRequiredChangesH\x04\x88\x01\x01\x42\x0e\n\x0c_ios_versionB\x12\n\x10_android_versionB\x0e\n\x0c_web_versionB\x11\n\x0f_native_versionB\x1a\n\x18_client_required_changes\x1a&\n\x13SDKVersionSpecifier\x12\x0f\n\x07version\x18\x01 \x01(\x05\x1a\x96\x01\n\x14SDKVersionRangeBound\x12_\n\x07version\x18\x01 \x01(\x0b\x32I.discord_protos.discord_experimentation.v1.Experiment.SDKVersionSpecifierH\x00\x88\x01\x01\x12\x11\n\tinclusive\x18\x02 \x01(\x08\x42\n\n\x08_version\x1a\xfd\x01\n\x0fSDKVersionRange\x12\x64\n\x0blower_bound\x18\x01 \x01(\x0b\x32J.discord_protos.discord_experimentation.v1.Experiment.SDKVersionRangeBoundH\x00\x88\x01\x01\x12\x64\n\x0bupper_bound\x18\x02 \x01(\x0b\x32J.discord_protos.discord_experimentation.v1.Experiment.SDKVersionRangeBoundH\x01\x88\x01\x01\x42\x0e\n\x0c_lower_boundB\x0e\n\x0c_upper_bound\x1a\x82\x01\n\nSDKVersion\x12U\n\x06ranges\x18\x01 \x03(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.SDKVersionRange\x12\x1d\n\x15work_around_pyoto_bug\x18\x02 \x01(\x08\x1a\xb5\x06\n\x15\x43lientOperatingSystem\x12Z\n\x0bios_version\x18\x01 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x00\x88\x01\x01\x12^\n\x0f\x61ndroid_version\x18\x02 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x01\x88\x01\x01\x12\\\n\rmacos_version\x18\x03 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x02\x88\x01\x01\x12^\n\x0fwindows_version\x18\x04 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x03\x88\x01\x01\x12\x62\n\x13playstation_version\x18\x05 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x04\x88\x01\x01\x12[\n\x0cxbox_version\x18\x06 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x05\x88\x01\x01\x12\\\n\rlinux_version\x18\x07 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.SDKVersionH\x06\x88\x01\x01\x42\x0e\n\x0c_ios_versionB\x12\n\x10_android_versionB\x10\n\x0e_macos_versionB\x12\n\x10_windows_versionB\x16\n\x14_playstation_versionB\x0f\n\r_xbox_versionB\x10\n\x0e_linux_version\x1a>\n\nStaffUsers\x12\x15\n\rwork_accounts\x18\x01 \x01(\x08\x12\x19\n\x11personal_accounts\x18\x02 \x01(\x08\x1a \n\x0bUserInGuild\x12\x11\n\tguild_ids\x18\x01 \x03(\x06\x1a\x1b\n\x07UserIds\x12\x10\n\x08user_ids\x18\x01 \x03(\x06\x1a#\n\x0c\x43lientLocale\x12\x13\n\x07locales\x18\x01 \x03(\tB\x02\x10\x00\x1a\x39\n\tISORegion\x12\x13\n\x0biso_country\x18\x01 \x01(\t\x12\x17\n\x0fiso_subdivision\x18\x02 \x01(\t\x1a;\n\x05Place\x12\x0c\n\x04\x63ity\x18\x01 \x01(\t\x12\x13\n\x0bsubdivision\x18\x02 \x01(\t\x12\x0f\n\x07\x63ountry\x18\x03 \x01(\t\x1a\xcc\x01\n\x08Location\x12U\n\niso_region\x18\x01 \x01(\x0b\x32?.discord_protos.discord_experimentation.v1.Experiment.ISORegionH\x00\x12\x0f\n\x05is_eu\x18\x02 \x01(\x08H\x00\x12L\n\x05place\x18\x03 \x01(\x0b\x32;.discord_protos.discord_experimentation.v1.Experiment.PlaceH\x00\x42\n\n\x08location\x1a\x63\n\x0e\x43lientLocation\x12Q\n\tlocations\x18\x01 \x03(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.Location\x1a\x1e\n\x08\x43lientIP\x12\x12\n\x06\x62locks\x18\x01 \x03(\tB\x02\x10\x00\x1a!\n\nUserLocale\x12\x13\n\x07locales\x18\x01 \x03(\tB\x02\x10\x00\x1a\x1b\n\tUserIsBot\x12\x0e\n\x06is_bot\x18\x01 \x01(\x08\x1a\xa6\x01\n\x0cUserAgeRange\x12\x38\n\rmin_age_years\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x00\x88\x01\x01\x12\x38\n\rmax_age_years\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x01\x88\x01\x01\x42\x10\n\x0e_min_age_yearsB\x10\n\x0e_max_age_years\x1a\x1d\n\x0c\x46ixed64Value\x12\r\n\x05value\x18\x01 \x01(\x06\x1a\xd5\x01\n\x0bUserIDRange\x12W\n\x06min_id\x18\x01 \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.Fixed64ValueH\x00\x88\x01\x01\x12W\n\x06max_id\x18\x02 \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.Fixed64ValueH\x01\x88\x01\x01\x42\t\n\x07_min_idB\t\n\x07_max_id\x1a\x1b\n\x0bUserHasFlag\x12\x0c\n\x04mask\x18\x01 \x01(\x06\x1a`\n\x13UnitIdInRangeByHash\x12\x10\n\x08hash_key\x18\x01 \x01(\t\x12\x1a\n\x12stop_ring_position\x18\x02 \x01(\r\x12\x1b\n\x13start_ring_position\x18\x03 \x01(\r\x1a\x34\n\x14\x43lientReleaseChannel\x12\x1c\n\x10release_channels\x18\x01 \x03(\tB\x02\x10\x00\x1a\x17\n\x06\x41lways\x12\r\n\x05value\x18\x01 \x01(\x08\x1a)\n\x12\x43lientSystemLocale\x12\x13\n\x07locales\x18\x01 \x03(\tB\x02\x10\x00\x1a\x42\n\x12UnitIdInExperiment\x12\x15\n\rexperiment_id\x18\x01 \x01(\x06\x12\x15\n\rvariation_ids\x18\x02 \x03(\x05\x1a(\n\x0fUserPremiumType\x12\x15\n\rpremium_types\x18\x01 \x03(\x05\x1aY\n\x1bUnitIdMatchesFilterSnapshot\x12\x1c\n\x14\x66ilter_snapshot_name\x18\x01 \x01(\t\x12\x1c\n\x14target_filter_values\x18\x02 \x03(\x06\x1a\x1d\n\x08GuildIds\x12\x11\n\tguild_ids\x18\x01 \x03(\x06\x1a\x9f\x01\n\x15GuildMemberCountRange\x12\x34\n\tmin_count\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x00\x88\x01\x01\x12\x34\n\tmax_count\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueH\x01\x88\x01\x01\x42\x0c\n\n_min_countB\x0c\n\n_max_count\x1a\'\n\x0fGuildHasFeature\x12\x14\n\x08\x66\x65\x61tures\x18\x01 \x03(\tB\x02\x10\x00\x1a{\n\x0cUserLocation\x12Q\n\tlocations\x18\x01 \x03(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.Location\x12\x18\n\x10prefer_client_ip\x18\x02 \x01(\x08\x1a\x36\n\x06UserIP\x12\x12\n\x06\x62locks\x18\x01 \x03(\tB\x02\x10\x00\x12\x18\n\x10prefer_client_ip\x18\x02 \x01(\x08\x1a\xe4\x12\n\x06\x46ilter\x12^\n\x0e\x63lient_version\x18\x02 \x01(\x0b\x32\x44.discord_protos.discord_experimentation.v1.Experiment.ClientPlatformH\x00\x12`\n\tclient_os\x18\x03 \x01(\x0b\x32K.discord_protos.discord_experimentation.v1.Experiment.ClientOperatingSystemH\x00\x12Q\n\x05staff\x18\x04 \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.StaffUsersH\x00\x12Z\n\ruser_in_guild\x18\x05 \x01(\x0b\x32\x41.discord_protos.discord_experimentation.v1.Experiment.UserInGuildH\x00\x12Q\n\x08user_ids\x18\x06 \x01(\x0b\x32=.discord_protos.discord_experimentation.v1.Experiment.UserIdsH\x00\x12[\n\rclient_locale\x18\x07 \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.ClientLocaleH\x00\x12_\n\x0f\x63lient_location\x18\x08 \x01(\x0b\x32\x44.discord_protos.discord_experimentation.v1.Experiment.ClientLocationH\x00\x12S\n\tclient_ip\x18\t \x01(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.ClientIPH\x00\x12W\n\x0buser_locale\x18\n \x01(\x0b\x32@.discord_protos.discord_experimentation.v1.Experiment.UserLocaleH\x00\x12N\n\x03\x62ot\x18\x0b \x01(\x0b\x32?.discord_protos.discord_experimentation.v1.Experiment.UserIsBotH\x00\x12\\\n\x0euser_age_range\x18\x0c \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.UserAgeRangeH\x00\x12Z\n\ruser_id_range\x18\r \x01(\x0b\x32\x41.discord_protos.discord_experimentation.v1.Experiment.UserIDRangeH\x00\x12Z\n\ruser_has_flag\x18\x0e \x01(\x0b\x32\x41.discord_protos.discord_experimentation.v1.Experiment.UserHasFlagH\x00\x12m\n\x18unit_id_in_range_by_hash\x18\x0f \x01(\x0b\x32I.discord_protos.discord_experimentation.v1.Experiment.UnitIdInRangeByHashH\x00\x12l\n\x16\x63lient_release_channel\x18\x10 \x01(\x0b\x32J.discord_protos.discord_experimentation.v1.Experiment.ClientReleaseChannelH\x00\x12N\n\x06\x61lways\x18\x11 \x01(\x0b\x32<.discord_protos.discord_experimentation.v1.Experiment.AlwaysH\x00\x12h\n\x14\x63lient_system_locale\x18\x12 \x01(\x0b\x32H.discord_protos.discord_experimentation.v1.Experiment.ClientSystemLocaleH\x00\x12i\n\x15unit_id_in_experiment\x18\x13 \x01(\x0b\x32H.discord_protos.discord_experimentation.v1.Experiment.UnitIdInExperimentH\x00\x12\x62\n\x11user_premium_type\x18\x14 \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.UserPremiumTypeH\x00\x12|\n\x1funit_id_matches_filter_snapshot\x18\x15 \x01(\x0b\x32Q.discord_protos.discord_experimentation.v1.Experiment.UnitIdMatchesFilterSnapshotH\x00\x12S\n\tguild_ids\x18\x16 \x01(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.GuildIdsH\x00\x12o\n\x18guild_member_count_range\x18\x19 \x01(\x0b\x32K.discord_protos.discord_experimentation.v1.Experiment.GuildMemberCountRangeH\x00\x12\x62\n\x11guild_has_feature\x18\x1a \x01(\x0b\x32\x45.discord_protos.discord_experimentation.v1.Experiment.GuildHasFeatureH\x00\x12[\n\ruser_location\x18\x1b \x01(\x0b\x32\x42.discord_protos.discord_experimentation.v1.Experiment.UserLocationH\x00\x12O\n\x07user_ip\x18\x1c \x01(\x0b\x32<.discord_protos.discord_experimentation.v1.Experiment.UserIPH\x00\x42\x08\n\x06\x66ilter\x1a \n\x08Override\x12\x14\n\x0cvariation_id\x18\x01 \x01(\x05\x1a\xeb\x02\n\x04Rule\x12H\n\x04type\x18\x01 \x01(\x0e\x32:.discord_protos.discord_experimentation.v1.Experiment.Type\x12M\n\x07\x66ilters\x18\x02 \x03(\x0b\x32<.discord_protos.discord_experimentation.v1.Experiment.Filter\x12U\n\x08override\x18\x03 \x01(\x0b\x32>.discord_protos.discord_experimentation.v1.Experiment.OverrideH\x00\x88\x01\x01\x12\x16\n\x0eis_sunset_rule\x18\x04 \x01(\x08\x12N\n\x07subtype\x18\x05 \x01(\x0e\x32=.discord_protos.discord_experimentation.v1.Experiment.SubtypeB\x0b\n\t_override\x1a\xc2\x01\n\x0b\x44\x65\x62ugConfig\x12\x1f\n\x17\x65nable_decision_logging\x18\x01 \x01(\x08\x12\x1b\n\x13metrics_sample_rate\x18\x02 \x01(\x01\x12\x1e\n\x16log_context_on_failure\x18\x03 \x01(\x08\x12\x17\n\x0flog_raw_headers\x18\x04 \x01(\x08\x12\x1a\n\x12tag_filter_metrics\x18\x05 \x01(\x08\x12 \n\x18\x64\x65\x63ision_log_sample_rate\x18\x06 \x01(\x01\"\x80\x01\n\x08UnitType\x12\x19\n\x15UNIT_TYPE_UNSPECIFIED\x10\x00\x12\x12\n\x0eUNIT_TYPE_USER\x10\x01\x12\x1a\n\x16UNIT_TYPE_INSTALLATION\x10\x02\x12\x13\n\x0fUNIT_TYPE_GUILD\x10\x03\x12\x14\n\x10UNIT_TYPE_CUSTOM\x10\x04\"c\n\x04Type\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bTYPE_ACTIVE\x10\x01\x12\x0f\n\x0bTYPE_UNUSED\x10\x02\x12\x0f\n\x0bTYPE_BURNED\x10\x03\x12\x12\n\x0eTYPE_PRESERVED\x10\x04\"3\n\x07Subtype\x12\x13\n\x0fSUBTYPE_REGULAR\x10\x00\x12\x13\n\x0fSUBTYPE_HOLDOUT\x10\x01\"\x84\x01\n\x05Phase\x12\x15\n\x11PHASE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bPHASE_DRAFT\x10\x01\x12\x15\n\x11PHASE_MEASUREMENT\x10\x02\x12\x15\n\x11PHASE_ROLLING_OUT\x10\x04\x12\x12\n\x0ePHASE_ARCHIVED\x10\x06\x12\x11\n\rPHASE_AA_MODE\x10\x07\"\xbe\x01\n\x07Surface\x12\x17\n\x13SURFACE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bSURFACE_API\x10\x01\x12\x0f\n\x0bSURFACE_APP\x10\x02\x12\x1c\n\x18SURFACE_DEVELOPER_PORTAL\x10\x03\x12\x17\n\x13SURFACE_ADMIN_PANEL\x10\x04\x12\x19\n\x15SURFACE_ADS_BUDGET_AB\x10\x05\x12\x15\n\x11SURFACE_AV_WORKER\x10\x06\x12\x0f\n\x0bSURFACE_SEO\x10\x07\"Q\n\x10\x45xposureTracking\x12\x1d\n\x19\x45XPOSURE_TRACKING_ENABLED\x10\x00\x12\x1e\n\x1a\x45XPOSURE_TRACKING_DISABLED\x10\x01\"\x8a\x01\n\x0e\x41ssignmentMode\x12\x18\n\x14\x41SSIGNMENT_MODE_FULL\x10\x00\x12!\n\x1d\x41SSIGNMENT_MODE_FORCE_CONTROL\x10\x03\x12\"\n\x1e\x41SSIGNMENT_MODE_OVERRIDES_ONLY\x10\x04\x12\x17\n\x13\x41SSIGNMENT_MODE_OFF\x10\x05\"[\n\x10\x43ustomUnitPrefix\x12\"\n\x1e\x43USTOM_UNIT_PREFIX_UNSPECIFIED\x10\x00\x12#\n\x1f\x43USTOM_UNIT_PREFIX_SEO_URL_SLUG\x10\x01\x42\r\n\x0b_created_atB\x0c\n\n_edited_atB\r\n\x0b_hypothesisB\x11\n\x0f_tech_spec_linkB\x0f\n\r_debug_configB\x14\n\x12_expected_end_dateB\r\n\x0b_archive_atB\x1b\n\x19_guild_experiment_versionb\x06proto3')
30
30
 
31
31
  _globals = globals()
32
32
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -47,106 +47,114 @@ if not _descriptor._USE_C_DESCRIPTORS:
47
47
  _globals['_EXPERIMENT_CLIENTSYSTEMLOCALE'].fields_by_name['locales']._serialized_options = b'\020\000'
48
48
  _globals['_EXPERIMENT_GUILDHASFEATURE'].fields_by_name['features']._loaded_options = None
49
49
  _globals['_EXPERIMENT_GUILDHASFEATURE'].fields_by_name['features']._serialized_options = b'\020\000'
50
+ _globals['_EXPERIMENT_USERIP'].fields_by_name['blocks']._loaded_options = None
51
+ _globals['_EXPERIMENT_USERIP'].fields_by_name['blocks']._serialized_options = b'\020\000'
50
52
  _globals['_EXPERIMENT'].fields_by_name['engine_feature_flags']._loaded_options = None
51
53
  _globals['_EXPERIMENT'].fields_by_name['engine_feature_flags']._serialized_options = b'\020\000'
52
54
  _globals['_EXPERIMENT']._serialized_start=156
53
- _globals['_EXPERIMENT']._serialized_end=10485
54
- _globals['_EXPERIMENT_BUCKET']._serialized_start=1691
55
- _globals['_EXPERIMENT_BUCKET']._serialized_end=1802
56
- _globals['_EXPERIMENT_VARIATION']._serialized_start=1805
57
- _globals['_EXPERIMENT_VARIATION']._serialized_end=2099
58
- _globals['_EXPERIMENT_PLATFORMVERSIONSPECIFIER']._serialized_start=2102
59
- _globals['_EXPERIMENT_PLATFORMVERSIONSPECIFIER']._serialized_end=2263
60
- _globals['_EXPERIMENT_PLATFORMVERSIONRANGEBOUND']._serialized_start=2266
61
- _globals['_EXPERIMENT_PLATFORMVERSIONRANGEBOUND']._serialized_end=2426
62
- _globals['_EXPERIMENT_PLATFORMVERSIONRANGE']._serialized_start=2429
63
- _globals['_EXPERIMENT_PLATFORMVERSIONRANGE']._serialized_end=2697
64
- _globals['_EXPERIMENT_PLATFORMVERSION']._serialized_start=2700
65
- _globals['_EXPERIMENT_PLATFORMVERSION']._serialized_end=2840
66
- _globals['_EXPERIMENT_CLIENTREQUIREDCHANGES']._serialized_start=2842
67
- _globals['_EXPERIMENT_CLIENTREQUIREDCHANGES']._serialized_end=2912
68
- _globals['_EXPERIMENT_CLIENTPLATFORM']._serialized_start=2915
69
- _globals['_EXPERIMENT_CLIENTPLATFORM']._serialized_end=3570
70
- _globals['_EXPERIMENT_SDKVERSIONSPECIFIER']._serialized_start=3572
71
- _globals['_EXPERIMENT_SDKVERSIONSPECIFIER']._serialized_end=3610
72
- _globals['_EXPERIMENT_SDKVERSIONRANGEBOUND']._serialized_start=3613
73
- _globals['_EXPERIMENT_SDKVERSIONRANGEBOUND']._serialized_end=3763
74
- _globals['_EXPERIMENT_SDKVERSIONRANGE']._serialized_start=3766
75
- _globals['_EXPERIMENT_SDKVERSIONRANGE']._serialized_end=4019
76
- _globals['_EXPERIMENT_SDKVERSION']._serialized_start=4022
77
- _globals['_EXPERIMENT_SDKVERSION']._serialized_end=4152
78
- _globals['_EXPERIMENT_CLIENTOPERATINGSYSTEM']._serialized_start=4155
79
- _globals['_EXPERIMENT_CLIENTOPERATINGSYSTEM']._serialized_end=4976
80
- _globals['_EXPERIMENT_STAFFUSERS']._serialized_start=4978
81
- _globals['_EXPERIMENT_STAFFUSERS']._serialized_end=5040
82
- _globals['_EXPERIMENT_USERINGUILD']._serialized_start=5042
83
- _globals['_EXPERIMENT_USERINGUILD']._serialized_end=5074
84
- _globals['_EXPERIMENT_USERIDS']._serialized_start=5076
85
- _globals['_EXPERIMENT_USERIDS']._serialized_end=5103
86
- _globals['_EXPERIMENT_CLIENTLOCALE']._serialized_start=5105
87
- _globals['_EXPERIMENT_CLIENTLOCALE']._serialized_end=5140
88
- _globals['_EXPERIMENT_ISOREGION']._serialized_start=5142
89
- _globals['_EXPERIMENT_ISOREGION']._serialized_end=5199
90
- _globals['_EXPERIMENT_PLACE']._serialized_start=5201
91
- _globals['_EXPERIMENT_PLACE']._serialized_end=5260
92
- _globals['_EXPERIMENT_LOCATION']._serialized_start=5263
93
- _globals['_EXPERIMENT_LOCATION']._serialized_end=5467
94
- _globals['_EXPERIMENT_CLIENTLOCATION']._serialized_start=5469
95
- _globals['_EXPERIMENT_CLIENTLOCATION']._serialized_end=5568
96
- _globals['_EXPERIMENT_CLIENTIP']._serialized_start=5570
97
- _globals['_EXPERIMENT_CLIENTIP']._serialized_end=5600
98
- _globals['_EXPERIMENT_USERLOCALE']._serialized_start=5602
99
- _globals['_EXPERIMENT_USERLOCALE']._serialized_end=5635
100
- _globals['_EXPERIMENT_USERISBOT']._serialized_start=5637
101
- _globals['_EXPERIMENT_USERISBOT']._serialized_end=5664
102
- _globals['_EXPERIMENT_USERAGERANGE']._serialized_start=5667
103
- _globals['_EXPERIMENT_USERAGERANGE']._serialized_end=5833
104
- _globals['_EXPERIMENT_FIXED64VALUE']._serialized_start=5835
105
- _globals['_EXPERIMENT_FIXED64VALUE']._serialized_end=5864
106
- _globals['_EXPERIMENT_USERIDRANGE']._serialized_start=5867
107
- _globals['_EXPERIMENT_USERIDRANGE']._serialized_end=6080
108
- _globals['_EXPERIMENT_USERHASFLAG']._serialized_start=6082
109
- _globals['_EXPERIMENT_USERHASFLAG']._serialized_end=6109
110
- _globals['_EXPERIMENT_UNITIDINRANGEBYHASH']._serialized_start=6111
111
- _globals['_EXPERIMENT_UNITIDINRANGEBYHASH']._serialized_end=6207
112
- _globals['_EXPERIMENT_CLIENTRELEASECHANNEL']._serialized_start=6209
113
- _globals['_EXPERIMENT_CLIENTRELEASECHANNEL']._serialized_end=6261
114
- _globals['_EXPERIMENT_ALWAYS']._serialized_start=6263
115
- _globals['_EXPERIMENT_ALWAYS']._serialized_end=6286
116
- _globals['_EXPERIMENT_CLIENTSYSTEMLOCALE']._serialized_start=6288
117
- _globals['_EXPERIMENT_CLIENTSYSTEMLOCALE']._serialized_end=6329
118
- _globals['_EXPERIMENT_UNITIDINEXPERIMENT']._serialized_start=6331
119
- _globals['_EXPERIMENT_UNITIDINEXPERIMENT']._serialized_end=6397
120
- _globals['_EXPERIMENT_USERPREMIUMTYPE']._serialized_start=6399
121
- _globals['_EXPERIMENT_USERPREMIUMTYPE']._serialized_end=6439
122
- _globals['_EXPERIMENT_UNITIDMATCHESFILTERSNAPSHOT']._serialized_start=6441
123
- _globals['_EXPERIMENT_UNITIDMATCHESFILTERSNAPSHOT']._serialized_end=6530
124
- _globals['_EXPERIMENT_GUILDIDS']._serialized_start=6532
125
- _globals['_EXPERIMENT_GUILDIDS']._serialized_end=6561
126
- _globals['_EXPERIMENT_GUILDMEMBERCOUNTRANGE']._serialized_start=6564
127
- _globals['_EXPERIMENT_GUILDMEMBERCOUNTRANGE']._serialized_end=6723
128
- _globals['_EXPERIMENT_GUILDHASFEATURE']._serialized_start=6725
129
- _globals['_EXPERIMENT_GUILDHASFEATURE']._serialized_end=6764
130
- _globals['_EXPERIMENT_FILTER']._serialized_start=6767
131
- _globals['_EXPERIMENT_FILTER']._serialized_end=8997
132
- _globals['_EXPERIMENT_OVERRIDE']._serialized_start=8999
133
- _globals['_EXPERIMENT_OVERRIDE']._serialized_end=9031
134
- _globals['_EXPERIMENT_RULE']._serialized_start=9034
135
- _globals['_EXPERIMENT_RULE']._serialized_end=9397
136
- _globals['_EXPERIMENT_DEBUGCONFIG']._serialized_start=9400
137
- _globals['_EXPERIMENT_DEBUGCONFIG']._serialized_end=9594
138
- _globals['_EXPERIMENT_UNITTYPE']._serialized_start=9596
139
- _globals['_EXPERIMENT_UNITTYPE']._serialized_end=9702
140
- _globals['_EXPERIMENT_TYPE']._serialized_start=9704
141
- _globals['_EXPERIMENT_TYPE']._serialized_end=9803
142
- _globals['_EXPERIMENT_SUBTYPE']._serialized_start=9805
143
- _globals['_EXPERIMENT_SUBTYPE']._serialized_end=9856
144
- _globals['_EXPERIMENT_PHASE']._serialized_start=9859
145
- _globals['_EXPERIMENT_PHASE']._serialized_end=9991
146
- _globals['_EXPERIMENT_SURFACE']._serialized_start=9994
147
- _globals['_EXPERIMENT_SURFACE']._serialized_end=10144
148
- _globals['_EXPERIMENT_EXPOSURETRACKING']._serialized_start=10146
149
- _globals['_EXPERIMENT_EXPOSURETRACKING']._serialized_end=10227
150
- _globals['_EXPERIMENT_ASSIGNMENTMODE']._serialized_start=10230
151
- _globals['_EXPERIMENT_ASSIGNMENTMODE']._serialized_end=10368
55
+ _globals['_EXPERIMENT']._serialized_end=11193
56
+ _globals['_EXPERIMENT_BUCKET']._serialized_start=1859
57
+ _globals['_EXPERIMENT_BUCKET']._serialized_end=1970
58
+ _globals['_EXPERIMENT_VARIATION']._serialized_start=1973
59
+ _globals['_EXPERIMENT_VARIATION']._serialized_end=2267
60
+ _globals['_EXPERIMENT_PLATFORMVERSIONSPECIFIER']._serialized_start=2270
61
+ _globals['_EXPERIMENT_PLATFORMVERSIONSPECIFIER']._serialized_end=2431
62
+ _globals['_EXPERIMENT_PLATFORMVERSIONRANGEBOUND']._serialized_start=2434
63
+ _globals['_EXPERIMENT_PLATFORMVERSIONRANGEBOUND']._serialized_end=2594
64
+ _globals['_EXPERIMENT_PLATFORMVERSIONRANGE']._serialized_start=2597
65
+ _globals['_EXPERIMENT_PLATFORMVERSIONRANGE']._serialized_end=2865
66
+ _globals['_EXPERIMENT_PLATFORMVERSION']._serialized_start=2868
67
+ _globals['_EXPERIMENT_PLATFORMVERSION']._serialized_end=3008
68
+ _globals['_EXPERIMENT_CLIENTREQUIREDCHANGES']._serialized_start=3010
69
+ _globals['_EXPERIMENT_CLIENTREQUIREDCHANGES']._serialized_end=3080
70
+ _globals['_EXPERIMENT_CLIENTPLATFORM']._serialized_start=3083
71
+ _globals['_EXPERIMENT_CLIENTPLATFORM']._serialized_end=3738
72
+ _globals['_EXPERIMENT_SDKVERSIONSPECIFIER']._serialized_start=3740
73
+ _globals['_EXPERIMENT_SDKVERSIONSPECIFIER']._serialized_end=3778
74
+ _globals['_EXPERIMENT_SDKVERSIONRANGEBOUND']._serialized_start=3781
75
+ _globals['_EXPERIMENT_SDKVERSIONRANGEBOUND']._serialized_end=3931
76
+ _globals['_EXPERIMENT_SDKVERSIONRANGE']._serialized_start=3934
77
+ _globals['_EXPERIMENT_SDKVERSIONRANGE']._serialized_end=4187
78
+ _globals['_EXPERIMENT_SDKVERSION']._serialized_start=4190
79
+ _globals['_EXPERIMENT_SDKVERSION']._serialized_end=4320
80
+ _globals['_EXPERIMENT_CLIENTOPERATINGSYSTEM']._serialized_start=4323
81
+ _globals['_EXPERIMENT_CLIENTOPERATINGSYSTEM']._serialized_end=5144
82
+ _globals['_EXPERIMENT_STAFFUSERS']._serialized_start=5146
83
+ _globals['_EXPERIMENT_STAFFUSERS']._serialized_end=5208
84
+ _globals['_EXPERIMENT_USERINGUILD']._serialized_start=5210
85
+ _globals['_EXPERIMENT_USERINGUILD']._serialized_end=5242
86
+ _globals['_EXPERIMENT_USERIDS']._serialized_start=5244
87
+ _globals['_EXPERIMENT_USERIDS']._serialized_end=5271
88
+ _globals['_EXPERIMENT_CLIENTLOCALE']._serialized_start=5273
89
+ _globals['_EXPERIMENT_CLIENTLOCALE']._serialized_end=5308
90
+ _globals['_EXPERIMENT_ISOREGION']._serialized_start=5310
91
+ _globals['_EXPERIMENT_ISOREGION']._serialized_end=5367
92
+ _globals['_EXPERIMENT_PLACE']._serialized_start=5369
93
+ _globals['_EXPERIMENT_PLACE']._serialized_end=5428
94
+ _globals['_EXPERIMENT_LOCATION']._serialized_start=5431
95
+ _globals['_EXPERIMENT_LOCATION']._serialized_end=5635
96
+ _globals['_EXPERIMENT_CLIENTLOCATION']._serialized_start=5637
97
+ _globals['_EXPERIMENT_CLIENTLOCATION']._serialized_end=5736
98
+ _globals['_EXPERIMENT_CLIENTIP']._serialized_start=5738
99
+ _globals['_EXPERIMENT_CLIENTIP']._serialized_end=5768
100
+ _globals['_EXPERIMENT_USERLOCALE']._serialized_start=5770
101
+ _globals['_EXPERIMENT_USERLOCALE']._serialized_end=5803
102
+ _globals['_EXPERIMENT_USERISBOT']._serialized_start=5805
103
+ _globals['_EXPERIMENT_USERISBOT']._serialized_end=5832
104
+ _globals['_EXPERIMENT_USERAGERANGE']._serialized_start=5835
105
+ _globals['_EXPERIMENT_USERAGERANGE']._serialized_end=6001
106
+ _globals['_EXPERIMENT_FIXED64VALUE']._serialized_start=6003
107
+ _globals['_EXPERIMENT_FIXED64VALUE']._serialized_end=6032
108
+ _globals['_EXPERIMENT_USERIDRANGE']._serialized_start=6035
109
+ _globals['_EXPERIMENT_USERIDRANGE']._serialized_end=6248
110
+ _globals['_EXPERIMENT_USERHASFLAG']._serialized_start=6250
111
+ _globals['_EXPERIMENT_USERHASFLAG']._serialized_end=6277
112
+ _globals['_EXPERIMENT_UNITIDINRANGEBYHASH']._serialized_start=6279
113
+ _globals['_EXPERIMENT_UNITIDINRANGEBYHASH']._serialized_end=6375
114
+ _globals['_EXPERIMENT_CLIENTRELEASECHANNEL']._serialized_start=6377
115
+ _globals['_EXPERIMENT_CLIENTRELEASECHANNEL']._serialized_end=6429
116
+ _globals['_EXPERIMENT_ALWAYS']._serialized_start=6431
117
+ _globals['_EXPERIMENT_ALWAYS']._serialized_end=6454
118
+ _globals['_EXPERIMENT_CLIENTSYSTEMLOCALE']._serialized_start=6456
119
+ _globals['_EXPERIMENT_CLIENTSYSTEMLOCALE']._serialized_end=6497
120
+ _globals['_EXPERIMENT_UNITIDINEXPERIMENT']._serialized_start=6499
121
+ _globals['_EXPERIMENT_UNITIDINEXPERIMENT']._serialized_end=6565
122
+ _globals['_EXPERIMENT_USERPREMIUMTYPE']._serialized_start=6567
123
+ _globals['_EXPERIMENT_USERPREMIUMTYPE']._serialized_end=6607
124
+ _globals['_EXPERIMENT_UNITIDMATCHESFILTERSNAPSHOT']._serialized_start=6609
125
+ _globals['_EXPERIMENT_UNITIDMATCHESFILTERSNAPSHOT']._serialized_end=6698
126
+ _globals['_EXPERIMENT_GUILDIDS']._serialized_start=6700
127
+ _globals['_EXPERIMENT_GUILDIDS']._serialized_end=6729
128
+ _globals['_EXPERIMENT_GUILDMEMBERCOUNTRANGE']._serialized_start=6732
129
+ _globals['_EXPERIMENT_GUILDMEMBERCOUNTRANGE']._serialized_end=6891
130
+ _globals['_EXPERIMENT_GUILDHASFEATURE']._serialized_start=6893
131
+ _globals['_EXPERIMENT_GUILDHASFEATURE']._serialized_end=6932
132
+ _globals['_EXPERIMENT_USERLOCATION']._serialized_start=6934
133
+ _globals['_EXPERIMENT_USERLOCATION']._serialized_end=7057
134
+ _globals['_EXPERIMENT_USERIP']._serialized_start=7059
135
+ _globals['_EXPERIMENT_USERIP']._serialized_end=7113
136
+ _globals['_EXPERIMENT_FILTER']._serialized_start=7116
137
+ _globals['_EXPERIMENT_FILTER']._serialized_end=9520
138
+ _globals['_EXPERIMENT_OVERRIDE']._serialized_start=9522
139
+ _globals['_EXPERIMENT_OVERRIDE']._serialized_end=9554
140
+ _globals['_EXPERIMENT_RULE']._serialized_start=9557
141
+ _globals['_EXPERIMENT_RULE']._serialized_end=9920
142
+ _globals['_EXPERIMENT_DEBUGCONFIG']._serialized_start=9923
143
+ _globals['_EXPERIMENT_DEBUGCONFIG']._serialized_end=10117
144
+ _globals['_EXPERIMENT_UNITTYPE']._serialized_start=10120
145
+ _globals['_EXPERIMENT_UNITTYPE']._serialized_end=10248
146
+ _globals['_EXPERIMENT_TYPE']._serialized_start=10250
147
+ _globals['_EXPERIMENT_TYPE']._serialized_end=10349
148
+ _globals['_EXPERIMENT_SUBTYPE']._serialized_start=10351
149
+ _globals['_EXPERIMENT_SUBTYPE']._serialized_end=10402
150
+ _globals['_EXPERIMENT_PHASE']._serialized_start=10405
151
+ _globals['_EXPERIMENT_PHASE']._serialized_end=10537
152
+ _globals['_EXPERIMENT_SURFACE']._serialized_start=10540
153
+ _globals['_EXPERIMENT_SURFACE']._serialized_end=10730
154
+ _globals['_EXPERIMENT_EXPOSURETRACKING']._serialized_start=10732
155
+ _globals['_EXPERIMENT_EXPOSURETRACKING']._serialized_end=10813
156
+ _globals['_EXPERIMENT_ASSIGNMENTMODE']._serialized_start=10816
157
+ _globals['_EXPERIMENT_ASSIGNMENTMODE']._serialized_end=10954
158
+ _globals['_EXPERIMENT_CUSTOMUNITPREFIX']._serialized_start=10956
159
+ _globals['_EXPERIMENT_CUSTOMUNITPREFIX']._serialized_end=11047
152
160
  # @@protoc_insertion_point(module_scope)
File without changes
@@ -246,6 +246,10 @@ message PreloadedUserSettings {
246
246
  optional google.protobuf.BoolValue enable_game_update_notifications = 15;
247
247
  optional google.protobuf.BoolValue enable_profile_updates_notifications = 16;
248
248
  optional google.protobuf.BoolValue enable_server_trending_notifications = 17;
249
+ optional google.protobuf.BoolValue enable_dm_reply_nudge_reminders = 18;
250
+ optional google.protobuf.BoolValue enable_summary_reminder_notifications = 19;
251
+ optional google.protobuf.BoolValue enable_gdm_all_reaction_notifications = 20;
252
+ optional google.protobuf.BoolValue enable_friend_gaming_activity_notifications = 21;
249
253
  }
250
254
 
251
255
  enum GuildActivityStatusRestrictionDefault {
@@ -273,6 +277,13 @@ message PreloadedUserSettings {
273
277
  GUILD_ACTIVITY_STATUS_RESTRICTION_DEFAULT_V2_ACTIVITY_STATUS_ON = 3;
274
278
  }
275
279
 
280
+ enum ProfileVisibility {
281
+ PROFILE_VISIBILITY_UNSET = 0;
282
+ PROFILE_VISIBILITY_FRIENDS_ONLY = 1;
283
+ PROFILE_VISIBILITY_FRIENDS_AND_SMALL_GUILDS = 2;
284
+ PROFILE_VISIBILITY_FRIENDS_AND_ALL_GUILDS = 3;
285
+ }
286
+
276
287
  message PrivacySettings {
277
288
  optional google.protobuf.BoolValue allow_activity_party_privacy_friends = 1;
278
289
  optional google.protobuf.BoolValue allow_activity_party_privacy_voice_channel = 2;
@@ -303,6 +314,7 @@ message PreloadedUserSettings {
303
314
  GuildActivityStatusRestrictionDefaultV2 default_guilds_activity_restricted_v2 = 29;
304
315
  optional google.protobuf.BoolValue quests_3p_data_opted_out = 30;
305
316
  optional google.protobuf.BoolValue show_local_time = 31;
317
+ ProfileVisibility profile_visibility = 32;
306
318
  }
307
319
 
308
320
  message DebugSettings {
@@ -428,6 +440,7 @@ message PreloadedUserSettings {
428
440
  message Favorites {
429
441
  map<fixed64, FavoriteChannel> favorite_channels = 1;
430
442
  bool muted = 2;
443
+ optional google.protobuf.BoolValue guild_visible = 3;
431
444
  }
432
445
 
433
446
  message AudioContextSetting {