onyxcord 2.1.0 → 3.2.0

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 (270) hide show
  1. checksums.yaml +4 -4
  2. data/lib/onyxcord/application_commands/command.rb +4 -97
  3. data/lib/onyxcord/application_commands/context.rb +4 -94
  4. data/lib/onyxcord/application_commands/option.rb +4 -75
  5. data/lib/onyxcord/application_commands/registry.rb +4 -45
  6. data/lib/onyxcord/application_commands.rb +8 -5
  7. data/lib/onyxcord/bot.rb +24 -1759
  8. data/lib/onyxcord/{cache.rb → cache/manager.rb} +16 -14
  9. data/lib/onyxcord/cache/stores/gateway.rb +272 -0
  10. data/lib/onyxcord/commands/bot/channels.rb +48 -0
  11. data/lib/onyxcord/commands/bot/execution.rb +174 -0
  12. data/lib/onyxcord/commands/bot/message_dispatch.rb +58 -0
  13. data/lib/onyxcord/commands/bot/permissions.rb +72 -0
  14. data/lib/onyxcord/commands/bot.rb +209 -0
  15. data/lib/onyxcord/commands/container.rb +21 -2
  16. data/lib/onyxcord/commands/parser.rb +30 -1
  17. data/lib/onyxcord/container.rb +16 -960
  18. data/lib/onyxcord/core/bot/application_commands.rb +210 -0
  19. data/lib/onyxcord/core/bot/awaits.rb +112 -0
  20. data/lib/onyxcord/core/bot/invites.rb +42 -0
  21. data/lib/onyxcord/core/bot/messaging.rb +161 -0
  22. data/lib/onyxcord/core/bot/oauth.rb +27 -0
  23. data/lib/onyxcord/core/bot/presence.rb +103 -0
  24. data/lib/onyxcord/core/bot/runtime.rb +183 -0
  25. data/lib/onyxcord/core/bot/voice.rb +69 -0
  26. data/lib/onyxcord/{logger.rb → core/logger.rb} +5 -0
  27. data/lib/onyxcord/core/version.rb +5 -0
  28. data/lib/onyxcord/events/await/base.rb +48 -0
  29. data/lib/onyxcord/events/await.rb +1 -46
  30. data/lib/onyxcord/events/ban/base.rb +54 -0
  31. data/lib/onyxcord/events/ban/remove.rb +11 -0
  32. data/lib/onyxcord/events/bans.rb +2 -58
  33. data/lib/onyxcord/events/channels/base.rb +91 -0
  34. data/lib/onyxcord/events/channels/delete.rb +73 -0
  35. data/lib/onyxcord/events/channels/pins.rb +44 -0
  36. data/lib/onyxcord/events/channels/recipients.rb +77 -0
  37. data/lib/onyxcord/events/channels.rb +4 -239
  38. data/lib/onyxcord/events/guilds/audit_logs.rb +79 -0
  39. data/lib/onyxcord/events/guilds/base.rb +97 -0
  40. data/lib/onyxcord/events/guilds/emoji.rb +147 -0
  41. data/lib/onyxcord/events/guilds.rb +3 -267
  42. data/lib/onyxcord/events/handlers/channels.rb +133 -0
  43. data/lib/onyxcord/events/handlers/core.rb +146 -0
  44. data/lib/onyxcord/events/handlers/guilds.rb +375 -0
  45. data/lib/onyxcord/events/handlers/interactions.rb +238 -0
  46. data/lib/onyxcord/events/handlers/lifetime.rb +71 -0
  47. data/lib/onyxcord/events/handlers/messages.rb +218 -0
  48. data/lib/onyxcord/events/handlers/presence.rb +56 -0
  49. data/lib/onyxcord/events/handlers/raw.rb +39 -0
  50. data/lib/onyxcord/events/handlers/reactions.rb +98 -0
  51. data/lib/onyxcord/events/handlers/scheduled_events.rb +243 -0
  52. data/lib/onyxcord/events/handlers/voice.rb +46 -0
  53. data/lib/onyxcord/events/integration/base.rb +45 -0
  54. data/lib/onyxcord/events/integration/create.rb +11 -0
  55. data/lib/onyxcord/events/integration/delete.rb +48 -0
  56. data/lib/onyxcord/events/integration/update.rb +11 -0
  57. data/lib/onyxcord/events/integrations.rb +4 -98
  58. data/lib/onyxcord/events/interactions/application_commands.rb +185 -0
  59. data/lib/onyxcord/events/interactions/autocomplete.rb +62 -0
  60. data/lib/onyxcord/events/interactions/base.rb +175 -0
  61. data/lib/onyxcord/events/interactions/components.rb +221 -0
  62. data/lib/onyxcord/events/interactions/permissions.rb +53 -0
  63. data/lib/onyxcord/events/interactions.rb +5 -622
  64. data/lib/onyxcord/events/invite/create.rb +79 -0
  65. data/lib/onyxcord/events/invite/delete.rb +55 -0
  66. data/lib/onyxcord/events/invites.rb +2 -125
  67. data/lib/onyxcord/events/lifetime/base.rb +31 -0
  68. data/lib/onyxcord/events/lifetime.rb +1 -29
  69. data/lib/onyxcord/events/member/add.rb +12 -0
  70. data/lib/onyxcord/events/member/base.rb +67 -0
  71. data/lib/onyxcord/events/member/delete.rb +21 -0
  72. data/lib/onyxcord/events/member/update.rb +25 -0
  73. data/lib/onyxcord/events/members.rb +4 -108
  74. data/lib/onyxcord/events/message/base.rb +295 -0
  75. data/lib/onyxcord/events/message/ids.rb +71 -0
  76. data/lib/onyxcord/events/message/mentions.rb +55 -0
  77. data/lib/onyxcord/events/message/updates.rb +27 -0
  78. data/lib/onyxcord/events/message.rb +4 -397
  79. data/lib/onyxcord/events/poll/add.rb +11 -0
  80. data/lib/onyxcord/events/poll/base.rb +106 -0
  81. data/lib/onyxcord/events/poll/remove.rb +11 -0
  82. data/lib/onyxcord/events/polls.rb +3 -116
  83. data/lib/onyxcord/events/presence/playing.rb +77 -0
  84. data/lib/onyxcord/events/presence/status.rb +60 -0
  85. data/lib/onyxcord/events/presence.rb +2 -129
  86. data/lib/onyxcord/events/raw/base.rb +74 -0
  87. data/lib/onyxcord/events/raw.rb +1 -72
  88. data/lib/onyxcord/events/reactions/base.rb +143 -0
  89. data/lib/onyxcord/events/reactions/clear.rb +99 -0
  90. data/lib/onyxcord/events/reactions.rb +2 -216
  91. data/lib/onyxcord/events/role/create.rb +46 -0
  92. data/lib/onyxcord/events/role/delete.rb +40 -0
  93. data/lib/onyxcord/events/role/update.rb +11 -0
  94. data/lib/onyxcord/events/roles.rb +3 -85
  95. data/lib/onyxcord/events/scheduled_events/events.rb +112 -0
  96. data/lib/onyxcord/events/scheduled_events/users.rb +91 -0
  97. data/lib/onyxcord/events/scheduled_events.rb +2 -169
  98. data/lib/onyxcord/events/thread/base.rb +49 -0
  99. data/lib/onyxcord/events/thread/members.rb +44 -0
  100. data/lib/onyxcord/events/thread/update.rb +18 -0
  101. data/lib/onyxcord/events/threads.rb +3 -98
  102. data/lib/onyxcord/events/typing/base.rb +73 -0
  103. data/lib/onyxcord/events/typing.rb +1 -71
  104. data/lib/onyxcord/events/voice/server_update.rb +48 -0
  105. data/lib/onyxcord/events/voice/state_update.rb +137 -0
  106. data/lib/onyxcord/events/voice_server_update.rb +2 -46
  107. data/lib/onyxcord/events/voice_state_update.rb +2 -135
  108. data/lib/onyxcord/events/webhook/update.rb +65 -0
  109. data/lib/onyxcord/events/webhooks.rb +1 -63
  110. data/lib/onyxcord/gateway/client.rb +460 -0
  111. data/lib/onyxcord/interactions/command.rb +120 -0
  112. data/lib/onyxcord/interactions/context.rb +109 -0
  113. data/lib/onyxcord/interactions/internal/application_command.rb +203 -0
  114. data/lib/onyxcord/interactions/internal/message.rb +152 -0
  115. data/lib/onyxcord/interactions/internal/metadata.rb +109 -0
  116. data/lib/onyxcord/interactions/internal/option_builder.rb +230 -0
  117. data/lib/onyxcord/interactions/internal/permission_builder.rb +90 -0
  118. data/lib/onyxcord/interactions/option.rb +88 -0
  119. data/lib/onyxcord/interactions/registry.rb +50 -0
  120. data/lib/onyxcord/interactions.rb +16 -0
  121. data/lib/onyxcord/internal/async_runtime.rb +32 -0
  122. data/lib/onyxcord/internal/event_bus.rb +591 -0
  123. data/lib/onyxcord/internal/event_executor.rb +155 -0
  124. data/lib/onyxcord/internal/gateway/opcodes.rb +22 -0
  125. data/lib/onyxcord/internal/gateway/session.rb +45 -0
  126. data/lib/onyxcord/internal/http.rb +189 -0
  127. data/lib/onyxcord/internal/json.rb +51 -0
  128. data/lib/onyxcord/{message_payload.rb → internal/message_payload.rb} +3 -3
  129. data/lib/onyxcord/internal/rate_limiter/async_rest.rb +151 -0
  130. data/lib/onyxcord/internal/rate_limiter/gateway.rb +44 -0
  131. data/lib/onyxcord/internal/rate_limiter/rest.rb +144 -0
  132. data/lib/onyxcord/internal/websocket.rb +79 -0
  133. data/lib/onyxcord/light/data.rb +1 -1
  134. data/lib/onyxcord/light/integrations.rb +1 -1
  135. data/lib/onyxcord/light/light_bot.rb +7 -7
  136. data/lib/onyxcord/{data → models}/activity.rb +2 -2
  137. data/lib/onyxcord/{data → models}/application.rb +3 -3
  138. data/lib/onyxcord/{data → models}/avatar_decoration.rb +1 -1
  139. data/lib/onyxcord/{data → models}/channel.rb +23 -23
  140. data/lib/onyxcord/{data → models}/collectibles.rb +1 -1
  141. data/lib/onyxcord/{data → models}/emoji.rb +1 -1
  142. data/lib/onyxcord/models/interaction.rb +450 -0
  143. data/lib/onyxcord/{data → models}/invite.rb +1 -1
  144. data/lib/onyxcord/{data → models}/member.rb +11 -11
  145. data/lib/onyxcord/{data → models}/message.rb +18 -14
  146. data/lib/onyxcord/{data → models}/poll.rb +2 -2
  147. data/lib/onyxcord/{data → models}/primary_server.rb +1 -1
  148. data/lib/onyxcord/{data → models}/profile.rb +4 -4
  149. data/lib/onyxcord/{data → models}/role.rb +6 -12
  150. data/lib/onyxcord/{data → models}/scheduled_event.rb +5 -5
  151. data/lib/onyxcord/{data → models}/server.rb +41 -41
  152. data/lib/onyxcord/{data → models}/server_preview.rb +2 -2
  153. data/lib/onyxcord/{data → models}/team.rb +1 -1
  154. data/lib/onyxcord/{data → models}/user.rb +5 -5
  155. data/lib/onyxcord/{data → models}/webhook.rb +10 -10
  156. data/lib/onyxcord/models.rb +57 -0
  157. data/lib/onyxcord/{api.rb → rest/client.rb} +23 -22
  158. data/lib/onyxcord/{api → rest/routes}/application.rb +79 -57
  159. data/lib/onyxcord/rest/routes/channel/base.rb +73 -0
  160. data/lib/onyxcord/rest/routes/channel/groups.rb +78 -0
  161. data/lib/onyxcord/rest/routes/channel/messages.rb +130 -0
  162. data/lib/onyxcord/rest/routes/channel/permissions.rb +73 -0
  163. data/lib/onyxcord/rest/routes/channel/pins.rb +45 -0
  164. data/lib/onyxcord/rest/routes/channel/polls.rb +32 -0
  165. data/lib/onyxcord/rest/routes/channel/reactions.rb +86 -0
  166. data/lib/onyxcord/rest/routes/channel/threads.rb +176 -0
  167. data/lib/onyxcord/rest/routes/channel/webhooks.rb +47 -0
  168. data/lib/onyxcord/rest/routes/channel.rb +12 -0
  169. data/lib/onyxcord/{api/interaction.rb → rest/routes/interaction/base.rb} +7 -25
  170. data/lib/onyxcord/rest/routes/interaction/response.rb +24 -0
  171. data/lib/onyxcord/rest/routes/interaction.rb +4 -0
  172. data/lib/onyxcord/{api → rest/routes}/invite.rb +7 -7
  173. data/lib/onyxcord/rest/routes/server/admin.rb +174 -0
  174. data/lib/onyxcord/rest/routes/server/assets.rb +25 -0
  175. data/lib/onyxcord/rest/routes/server/bans.rb +67 -0
  176. data/lib/onyxcord/rest/routes/server/base.rb +77 -0
  177. data/lib/onyxcord/rest/routes/server/channels.rb +58 -0
  178. data/lib/onyxcord/rest/routes/server/emoji.rb +48 -0
  179. data/lib/onyxcord/rest/routes/server/members.rb +109 -0
  180. data/lib/onyxcord/rest/routes/server/messages.rb +19 -0
  181. data/lib/onyxcord/rest/routes/server/roles.rb +156 -0
  182. data/lib/onyxcord/rest/routes/server/scheduled_events.rb +86 -0
  183. data/lib/onyxcord/rest/routes/server.rb +12 -0
  184. data/lib/onyxcord/{api → rest/routes}/user.rb +23 -23
  185. data/lib/onyxcord/{api → rest/routes}/webhook.rb +22 -22
  186. data/lib/onyxcord/{allowed_mentions.rb → utils/allowed_mentions.rb} +1 -1
  187. data/lib/onyxcord/utils/timestamp.rb +69 -0
  188. data/lib/onyxcord/voice/{voice_bot.rb → client.rb} +4 -4
  189. data/lib/onyxcord/voice/encoder.rb +1 -1
  190. data/lib/onyxcord/voice/network/udp.rb +135 -0
  191. data/lib/onyxcord/voice/network/websocket.rb +225 -0
  192. data/lib/onyxcord/voice/network.rb +5 -357
  193. data/lib/onyxcord/webhooks/builder.rb +1 -1
  194. data/lib/onyxcord/webhooks/client.rb +13 -13
  195. data/lib/onyxcord/webhooks/modal/group_builder.rb +55 -0
  196. data/lib/onyxcord/webhooks/modal/label_builder.rb +183 -0
  197. data/lib/onyxcord/webhooks/modal.rb +2 -239
  198. data/lib/onyxcord/webhooks/version.rb +3 -3
  199. data/lib/onyxcord/webhooks/view/container_builder.rb +80 -0
  200. data/lib/onyxcord/webhooks/view/file_builder.rb +24 -0
  201. data/lib/onyxcord/webhooks/view/media_gallery_builder.rb +50 -0
  202. data/lib/onyxcord/webhooks/view/row_builder.rb +120 -0
  203. data/lib/onyxcord/webhooks/view/section_builder.rb +61 -0
  204. data/lib/onyxcord/webhooks/view/select_menu_builder.rb +77 -0
  205. data/lib/onyxcord/webhooks/view/separator_builder.rb +22 -0
  206. data/lib/onyxcord/webhooks/view/text_display_builder.rb +20 -0
  207. data/lib/onyxcord/webhooks/view.rb +9 -425
  208. data/lib/onyxcord.rb +106 -42
  209. metadata +207 -92
  210. data/.github/CONTRIBUTING.md +0 -13
  211. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  212. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -24
  213. data/.github/pull_request_template.md +0 -37
  214. data/.github/workflows/ci.yml +0 -78
  215. data/.github/workflows/codeql.yml +0 -65
  216. data/.github/workflows/deploy.yml +0 -54
  217. data/.github/workflows/release.yml +0 -51
  218. data/.gitignore +0 -17
  219. data/.markdownlint.json +0 -4
  220. data/.overcommit.yml +0 -7
  221. data/.rspec +0 -2
  222. data/.rubocop.yml +0 -129
  223. data/.yardopts +0 -1
  224. data/CHANGELOG.md +0 -257
  225. data/Gemfile +0 -6
  226. data/LICENSE.txt +0 -21
  227. data/README.md +0 -448
  228. data/Rakefile +0 -13
  229. data/lib/onyxcord/api/channel.rb +0 -703
  230. data/lib/onyxcord/api/server.rb +0 -775
  231. data/lib/onyxcord/async/runtime.rb +0 -30
  232. data/lib/onyxcord/commands/command_bot.rb +0 -505
  233. data/lib/onyxcord/data/interaction.rb +0 -1151
  234. data/lib/onyxcord/data.rb +0 -57
  235. data/lib/onyxcord/event_executor.rb +0 -153
  236. data/lib/onyxcord/gateway.rb +0 -505
  237. data/lib/onyxcord/http.rb +0 -186
  238. data/lib/onyxcord/json.rb +0 -49
  239. data/lib/onyxcord/rate_limiter/async_rest.rb +0 -150
  240. data/lib/onyxcord/rate_limiter/gateway.rb +0 -42
  241. data/lib/onyxcord/rate_limiter/rest.rb +0 -142
  242. data/lib/onyxcord/version.rb +0 -7
  243. data/lib/onyxcord/websocket.rb +0 -77
  244. data/onyxcord.gemspec +0 -63
  245. /data/lib/onyxcord/{configuration.rb → core/configuration.rb} +0 -0
  246. /data/lib/onyxcord/{errors.rb → core/errors.rb} +0 -0
  247. /data/lib/onyxcord/{upload.rb → internal/upload.rb} +0 -0
  248. /data/lib/onyxcord/{data → models}/attachment.rb +0 -0
  249. /data/lib/onyxcord/{data → models}/audit_logs.rb +0 -0
  250. /data/lib/onyxcord/{data → models}/call.rb +0 -0
  251. /data/lib/onyxcord/{data → models}/channel_tag.rb +0 -0
  252. /data/lib/onyxcord/{data → models}/component.rb +0 -0
  253. /data/lib/onyxcord/{data → models}/embed.rb +0 -0
  254. /data/lib/onyxcord/{data → models}/install_params.rb +0 -0
  255. /data/lib/onyxcord/{data → models}/integration.rb +0 -0
  256. /data/lib/onyxcord/{data → models}/message_activity.rb +0 -0
  257. /data/lib/onyxcord/{data → models}/overwrite.rb +0 -0
  258. /data/lib/onyxcord/{data → models}/reaction.rb +0 -0
  259. /data/lib/onyxcord/{data → models}/recipient.rb +0 -0
  260. /data/lib/onyxcord/{data → models}/role_connection_data.rb +0 -0
  261. /data/lib/onyxcord/{data → models}/role_subscription.rb +0 -0
  262. /data/lib/onyxcord/{data → models}/snapshot.rb +0 -0
  263. /data/lib/onyxcord/{data → models}/timestamp.rb +0 -0
  264. /data/lib/onyxcord/{data → models}/voice_region.rb +0 -0
  265. /data/lib/onyxcord/{data → models}/voice_state.rb +0 -0
  266. /data/lib/onyxcord/{colour_rgb.rb → utils/colour_rgb.rb} +0 -0
  267. /data/lib/onyxcord/{id_object.rb → utils/id_object.rb} +0 -0
  268. /data/lib/onyxcord/{message_components.rb → utils/message_components.rb} +0 -0
  269. /data/lib/onyxcord/{paginator.rb → utils/paginator.rb} +0 -0
  270. /data/lib/onyxcord/{permissions.rb → utils/permissions.rb} +0 -0
@@ -1,54 +0,0 @@
1
- name: Deploy Docs
2
-
3
- on:
4
- push:
5
- branches: [main] # deploy only on merges to main
6
- tags:
7
- - "v*" # deploy when a version tag (e.g., v1.0.0) is created
8
-
9
- jobs:
10
- deploy:
11
- runs-on: ubuntu-latest
12
- container:
13
- image: ruby:3.3-alpine
14
-
15
- steps:
16
- - uses: actions/checkout@v4
17
-
18
- - name: Install OS packages
19
- run: apk add git build-base ruby-dev libsodium-dev
20
-
21
- - name: Cache bundle
22
- uses: actions/cache@v4
23
- with:
24
- path: vendor/bundle
25
- key: bundle-${{ hashFiles('Gemfile', 'onyxcord.gemspec') }}-yard
26
-
27
- - name: Install dependencies
28
- run: bundle install --path vendor/bundle
29
-
30
- - name: Generate YARD documentation
31
- run: |
32
- mkdir -p docs
33
- bundle exec yard --output-dir docs
34
-
35
- - name: Determine deploy folder
36
- id: set_folder
37
- run: |
38
- if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
39
- echo "folder=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
40
- else
41
- echo "folder=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT
42
- fi
43
- echo "Deploying to folder: ${{ steps.set_folder.outputs.folder }}"
44
-
45
- - name: Deploy to GitHub Pages
46
- uses: peaceiris/actions-gh-pages@v4
47
- with:
48
- github_token: ${{ secrets.GITHUB_TOKEN }}
49
- publish_dir: docs
50
- publish_branch: gh-pages
51
- destination_dir: ${{ steps.set_folder.outputs.folder }}
52
- keep_files: true
53
- user_name: "GitHub Actions"
54
- user_email: "actions@github.com"
@@ -1,51 +0,0 @@
1
- name: Publish RubyGems + GitHub Packages
2
-
3
- on:
4
- release:
5
- types: [published]
6
-
7
- jobs:
8
- publish:
9
- runs-on: ubuntu-latest
10
- permissions:
11
- packages: write
12
- id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
13
- contents: write # IMPORTANT: this permission is required for `rake release` to push the release tag
14
-
15
- steps:
16
- - uses: actions/checkout@v5
17
- with:
18
- persist-credentials: false
19
- - name: Set up Ruby
20
- uses: ruby/setup-ruby@v1
21
- with:
22
- bundler-cache: true
23
- ruby-version: '3.4.7'
24
-
25
- - name: Validate tag matches gemspecs
26
- run: |
27
- TAG_VERSION="${GITHUB_REF#refs/tags/v}"
28
- for gemspec in *.gemspec; do
29
- GEM_VERSION=$(ruby -e "puts Gem::Specification.load('$gemspec').version")
30
- if [ "$TAG_VERSION" != "$GEM_VERSION" ]; then
31
- echo "::error::$gemspec version ($GEM_VERSION) does not match tag ($TAG_VERSION)"
32
- exit 1
33
- fi
34
- done
35
-
36
- - uses: rubygems/release-gem@v1
37
-
38
- - name: Publish to GitHub Packages
39
- env:
40
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
- run: |
42
- OWNER=$(echo "${GITHUB_REPOSITORY}" | cut -d'/' -f1)
43
- for gemspec in *.gemspec; do
44
- gem build "$gemspec"
45
- done
46
- for gem_file in *.gem; do
47
- echo "Publishing $gem_file to GitHub Packages..."
48
- gem push "$gem_file" \
49
- --key github \
50
- --host "https://rubygems.pkg.github.com/${OWNER}" || true
51
- done
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /profiles/
10
- /tmp/
11
- /.idea/
12
- /obsidian/
13
- .DS_Store
14
- *.gem
15
- **.sw*
16
-
17
- /vendor/bundle
data/.markdownlint.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "MD013": false,
3
- "MD024": { "siblings_only": true }
4
- }
data/.overcommit.yml DELETED
@@ -1,7 +0,0 @@
1
- PreCommit:
2
- RuboCop:
3
- enabled: true
4
- on_warn: fail # Treat all warnings as failures
5
-
6
- AuthorName:
7
- enabled: false
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --require spec_helper
data/.rubocop.yml DELETED
@@ -1,129 +0,0 @@
1
- plugins:
2
- - rubocop-performance
3
- - rubocop-rake
4
-
5
- inherit_mode:
6
- merge:
7
- - AllowedNames
8
-
9
- AllCops:
10
- NewCops: enable
11
- TargetRubyVersion: 3.3
12
-
13
- # Disable line length checks
14
- Layout/LineLength:
15
- Enabled: false
16
-
17
- # TODO: Larger refactor
18
- Lint/MissingSuper:
19
- Enabled: false
20
-
21
- # Allow 'Pokémon-style' exception handling
22
- Lint/RescueException:
23
- Enabled: false
24
-
25
- # Disable all metrics.
26
- Metrics:
27
- Enabled: false
28
-
29
- # Allow some common and/or obvious short method params
30
- Naming/MethodParameterName:
31
- AllowedNames:
32
- - e
33
-
34
- # Ignore `eval` in the examples folder
35
- Security/Eval:
36
- Exclude:
37
- - examples/**/*
38
-
39
- # https://stackoverflow.com/q/4763121/
40
- Style/Alias:
41
- Enabled: false
42
-
43
- # Had to disable this globally because it's being silently autocorrected even with local disable comments?
44
- Style/BisectedAttrAccessor:
45
- Enabled: false
46
-
47
- # Prefer compact module/class defs
48
- Style/ClassAndModuleChildren:
49
- Enabled: false
50
-
51
- # So RuboCop doesn't complain about application IDs
52
- Style/NumericLiterals:
53
- Exclude:
54
- - examples/**/*
55
-
56
- # TODO: Requires breaking changes
57
- Style/OptionalBooleanParameter:
58
- Enabled: false
59
-
60
- # Prefer explicit arguments in case global variables like `$;` or `$,` are changed
61
- Style/RedundantArgument:
62
- Enabled: false
63
-
64
- # Prefer |m, e| for the `reduce` block arguments
65
- Style/SingleLineBlockParams:
66
- Methods:
67
- - reduce: [m, e]
68
- - inject: [m, e]
69
-
70
- ###################################
71
- ## NEW COPS TO MAKE DECISIONS ON ##
72
- ###################################
73
-
74
- # TODO: Decide how you want to handle this:
75
- # https://rubydoc.info/gems/rubocop/RuboCop/Cop/Style/HashSyntax
76
- Style/HashSyntax:
77
- EnforcedShorthandSyntax: either
78
-
79
- Style/ArgumentsForwarding:
80
- Enabled: false
81
-
82
- Performance/StringIdentifierArgument:
83
- Enabled: false
84
-
85
- Style/ComparableClamp:
86
- Enabled: false
87
-
88
- Style/SuperArguments:
89
- Enabled: false
90
-
91
- Naming/BlockForwarding:
92
- Enabled: false
93
-
94
- Style/RedundantSelfAssignmentBranch:
95
- Enabled: false
96
-
97
- Performance/MapCompact:
98
- Enabled: false
99
-
100
- Gemspec/RequiredRubyVersion:
101
- Enabled: false
102
-
103
- Gemspec/DevelopmentDependencies:
104
- Enabled: false
105
-
106
- Style/RedundantReturn:
107
- Enabled: false
108
-
109
- Style/RedundantParentheses:
110
- Enabled: false
111
-
112
- Layout/EndOfLine:
113
- Enabled: true
114
- EnforcedStyle: lf
115
-
116
- # This will probably be a breaking change, but should happen
117
- Style/ReturnNilInPredicateMethodDefinition:
118
- Enabled: false
119
-
120
- # FIXME: Disabled due to breaking tests, should probably refactor the code instead
121
- Style/SafeNavigation:
122
- Enabled: false
123
-
124
- Style/Documentation:
125
- Enabled: true
126
-
127
- Style/IfUnlessModifier:
128
- Exclude:
129
- - lib/onyxcord/data/role.rb
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- --markup markdown --hide-tag todo --fail-on-warning
data/CHANGELOG.md DELETED
@@ -1,257 +0,0 @@
1
- # Changelog
2
-
3
- ## 2.1.0 - 2026-07-01
4
-
5
- ### Melhorias de REST e gateway
6
-
7
- - Adiciona `OnyxCord::MessagePayload` e `OnyxCord::Upload` para centralizar payloads, anexos e multipart.
8
- - Melhora rate limit global async para bloquear novas requests enquanto o limite global esta ativo.
9
- - Adiciona retry REST para falhas temporarias `500`, `502`, `503`, `504` e erros de conexao.
10
- - Adiciona erros HTTP tipados com `status`, `code`, `headers`, `route`, `body` e `response`.
11
- - Torna o reconnect do gateway mais defensivo: quedas antes do `HELLO` voltam para `IDENTIFY`, quedas depois do `HELLO` tentam `RESUME`.
12
- - Adiciona `AllowedMentions.none` e `AllowedMentions.all`.
13
- - Ajusta edicao de mensagens para limpar `embeds` ao editar `content`, limpar `content` ao editar `embeds`, e preservar campos com `:keep`.
14
- - Valida payloads antes da API para limites de embeds/anexos e combinacoes invalidas de Components V2.
15
-
16
- ## 2.0.20 - 2026-06-30
17
-
18
- ### Correcoes de REST
19
-
20
- - Porta o formato multipart do disnake: lista de partes `files[n]` e `payload_json`, com reset do arquivo antes do envio.
21
-
22
- ## 2.0.19 - 2026-06-30
23
-
24
- ### Correcoes de REST
25
-
26
- - Adiciona diagnostico de metodo, URL sanitizada, headers e formato do body em erros HTTP sem JSON.
27
-
28
- ## 2.0.18 - 2026-06-30
29
-
30
- ### Correcoes de REST
31
-
32
- - Normaliza multipart de followup webhook com `payload_json` primeiro e sem campos vazios.
33
-
34
- ## 2.0.17 - 2026-06-30
35
-
36
- ### Correcoes de REST
37
-
38
- - Envia `payload_json` com `Content-Type: application/json` e `.txt` como `text/plain` em multipart.
39
-
40
- ## 2.0.16 - 2026-06-30
41
-
42
- ### Correcoes de REST
43
-
44
- - Forca HTTP/1.1 na sessao REST do HTTPX para evitar `protocol_error` em interacoes e followups.
45
-
46
- ## 2.0.15 - 2026-06-30
47
-
48
- ### Correcoes de REST
49
-
50
- - Envia uploads `multipart/form-data` por `Net::HTTP` no adaptador REST para evitar rejeicao `HTTP 400` do Cloudflare em anexos.
51
-
52
- ## 2.0.14 - 2026-06-30
53
-
54
- ### Correcoes de REST
55
-
56
- - Corrige uploads `multipart/form-data` no adaptador HTTPX usando `form:` nativo, evitando `HTTP 400` HTML do Cloudflare em anexos.
57
-
58
- ## 2.0.13 - 2026-06-28
59
-
60
- ### Correcoes de gateway
61
-
62
- - Evita chamadas REST em `Bot#update_voice_state` ao processar `VOICE_STATE_UPDATE`.
63
- - Torna `GUILD_UPDATE` tolerante a guild ainda nao cacheada.
64
-
65
- ## 2.0.12 - 2026-06-28
66
-
67
- ### Correcoes de gateway
68
-
69
- - Evita chamadas REST durante a criação de eventos do Gateway para `VOICE_STATE_UPDATE` e `CHANNEL_CREATE`.
70
- - Trata `Async::Cancel` durante dispatch do Gateway como cancelamento esperado, sem registrar erro fatal.
71
-
72
- ## 2.0.11 - 2026-06-28
73
-
74
- ### Correcoes de estabilidade
75
-
76
- - Isola a sessao HTTP persistente por thread para evitar que tarefas em segundo plano disputem a mesma conexao REST das interacoes.
77
-
78
- ## 2.0.10 - 2026-06-28
79
-
80
- ### Correcoes de voz
81
-
82
- - Mantem `channel_id` no cache de `VoiceState` mesmo quando o objeto do canal ainda nao foi resolvido.
83
- - Expoe `channel_id` e `old_channel_id` em `VoiceStateUpdateEvent`, corrigindo entradas em call que pareciam `nil -> nil`.
84
- - Permite que raw dispatch handlers filtrem pacotes com chaves string ou symbol.
85
-
86
- ## 2.0.9 - 2026-06-28
87
-
88
- ### Correcoes de estabilidade
89
-
90
- - Tolera um heartbeat sem ACK antes de reconectar, evitando queda por ACK atrasado isolado.
91
-
92
- ## 2.0.8 - 2026-06-28
93
-
94
- ### Correcoes de gateway
95
-
96
- - Forca WebSocket do Gateway e do cliente generico em HTTP/1.1 para evitar `Async::WebSocket::ConnectionError: Failed to negotiate connection!` ao conectar no Discord.
97
- - Desativa extensoes WebSocket no handshake para evitar close `Error while decoding payload` no Gateway do Discord.
98
- - Remove o empacotamento separado `onyxcord-webhooks`; webhooks continuam incluidos diretamente na gem `onyxcord`.
99
-
100
- ## 2.0.6 - 2026-06-28
101
-
102
- ### Correcoes de empacotamento
103
-
104
- - Incluidos na gem os arquivos da infraestrutura async que ficaram fora do pacote `2.0.5`: `onyxcord/async/runtime` e `onyxcord/rate_limiter/async_rest`.
105
- - Incluidos na gem os arquivos da DSL moderna de application commands: `onyxcord/application_commands` e seus componentes internos.
106
- - Corrige `LoadError: cannot load such file -- onyxcord/async/runtime` ao usar a gem publicada.
107
-
108
- ## 2.0.5 - 2026-06-28
109
-
110
- ### Async Runtime (Infraestrutura nao-bloqueante)
111
-
112
- - **`OnyxCord::AsyncRuntime`**: modulo central que gerencia o reactor `async` com `run`, `async` e `sleep`, reaproveitando reactor existente quando disponivel.
113
- - **`EventExecutor::AsyncPool`**: novo pool de workers baseado em `Async::Queue` e fibers, sem threads.
114
- - **Gateway**: `run_async` nao cria mais `Thread.new` — usa `@task = AsyncRuntime.async { run }`. Todos os `sleep` trocados por `AsyncRuntime.sleep`.
115
- - **WebSocket**: usa `AsyncRuntime.async` em vez de `Async do` solto na classe.
116
- - **API REST**: `request` agora delega para `request_async` automaticamente quando dentro de um reactor. `request_async` usa rate limiter async, `AsyncRuntime.sleep`, e retry com limite em 502.
117
- - **Rate Limiter Async**: novo `OnyxCord::RateLimiter::AsyncRest` que evita `mutex.synchronize { sleep }` bloqueante.
118
- - **Bot**: `run`/`stop`/`join` refatorados para o runtime async. `send_temporary_message` e `voice_connect` usam sleeps async.
119
- - Compatibilidade sync mantida: a API publica continua funcionando de forma sincrona quando chamada fora de um reactor.
120
-
121
- ### Modern Application Commands DSL
122
-
123
- - **`bot.slash`, `bot.user_command`, `bot.message_command`**: nova DSL para comandos modernos com definicao e handler unificados.
124
- - **`bot.sync_application_commands!`**: sincroniza todos os commands registrados com a API do Discord de uma vez.
125
- - **`bot.bulk_overwrite_global_application_commands`** e **`bot.bulk_overwrite_guild_application_commands`**: wrappers para bulk overwrite.
126
- - **`ApplicationCommands::Context`**: wrapper com `respond`, `defer`, `edit_original`, `delete_original`, `followup` e acesso a `options`, `guild`, `channel`, `user`.
127
- - **`Interaction#edit_original`**, **`Interaction#delete_original`**, **`Interaction#followup`**: novos aliases dos metodos originais.
128
- - API legacy (`register_application_command` + `application_command`) mantida com compatibilidade total.
129
-
130
- ### Exemplo da nova DSL
131
-
132
- ```ruby
133
- bot.slash :ban, description: "Bane um membro", default_member_permissions: [:ban_members] do
134
- user :member, "Membro que sera banido", required: true
135
- string :reason, "Motivo do banimento", max_length: 512
136
-
137
- execute do |ctx|
138
- ctx.defer(ephemeral: true)
139
- member = ctx.options[:member]
140
- reason = ctx.options[:reason] || "Sem motivo informado"
141
- ctx.guild.ban(member, reason: reason)
142
- ctx.edit_original(content: "Membro banido com sucesso.")
143
- end
144
- end
145
-
146
- bot.sync_application_commands!(server_id: ENV.fetch('DISCORD_SERVER_ID'))
147
- ```
148
-
149
- ### Validacao
150
-
151
- - `bundle exec rspec`: 460 exemplos, 0 falhas, 3 pendentes.
152
- - `ruby -c lib/onyxcord/**/*.rb`: todos os arquivos com sintaxe OK.
153
- - `gem build onyxcord.gemspec`: sucesso.
154
-
155
- ## 2.0.0 - 2026-06-28
156
-
157
- ### Arquitetura & Performance (Major Refactoring)
158
-
159
- - **Runtime 100% Async**: A infraestrutura de threads (`Thread.new`) foi substituída pelo modelo de fibers do Ruby usando a gem `async`. Gateway, heartbeats, fila REST, worker de eventos e comandos agora executam de forma não-bloqueante no reator Async.
160
- - **REST Moderno via HTTPX**: Substituída a gem legada `rest-client` pela `httpx`, trazendo suporte nativo a conexões persistentes (Keep-Alive), HTTP/2, multipart uploads nativos e retries automáticos em erros 502.
161
- - **Gateway via Async-WebSocket**: Substituída a implementação de raw TCP sockets + `websocket-client-simple` por `async-websocket`, proporcionando um event loop de gateway extremamente rápido e escalável.
162
- - **Parse JSON via Oj**: A gem `oj` foi integrada em modo de compatibilidade (`mode: :compat`), acelerando transparentemente todas as serializações e deserializações de pacotes do Discord na lib inteira.
163
- - **Cache Inteligente LRU**: Os caches em memória (usuários, canais, servidores, membros) agora utilizam `LruRedux::ThreadSafeCache`. Os tamanhos padrão foram aumentados (`users: 50_000`, `channels: 10_000`, `servers: 1_000`, `members: 100_000`) e podem ser customizados via `OnyxCord.configure { |c| c.cache_sizes.users = 100_000 }`.
164
- - **Fusão do Webhooks**: A funcionalidade da gem separada `onyxcord-webhooks` foi integrada diretamente no núcleo da gem `onyxcord`; nao ha mais pacote separado para publicar.
165
- - **Alvo Ruby ≥ 3.4**: Atualizada a versão mínima requerida do Ruby para aproveitar as otimizações modernas do interpretador e fibras.
166
-
167
- ## 1.1.8 - 2026-06-28
168
-
169
- ### Correcoes
170
-
171
- - `Components::Label` agora delega `custom_id`, `value` e `values` para o componente interativo interno, mantendo compatibilidade com codigo legado de modal que itera por `event.components`.
172
- - Modais modernos continuam preservando `label`, `description` e `component`, enquanto `event.value(custom_id)`, `event.values(custom_id)` e acesso direto em `event.components` funcionam de forma consistente.
173
-
174
- ### Validacao
175
-
176
- - `bundle exec rspec spec/components_v2_spec.rb`: sucesso.
177
- - `bundle exec rspec`: 460 exemplos, 0 falhas, 3 pendentes.
178
- - `ruby -c lib/onyxcord/data/component.rb`: sucesso.
179
- - `ruby -c spec/components_v2_spec.rb`: sucesso.
180
- - `gem build onyxcord.gemspec`: sucesso.
181
-
182
- ## 1.1.7 - 2026-06-28
183
-
184
- ### Melhorias
185
-
186
- - Atualizada a descricao publicada no RubyGems para mostrar o convite da comunidade Discord: `https://discord.gg/Jy2tpCUtzM`.
187
- - README mantem as secoes em ingles, portugues e espanhol com o link da comunidade.
188
-
189
- ### Validacao
190
-
191
- - `ruby -c onyxcord.gemspec`: sucesso.
192
-
193
- ## 1.1.6 - 2026-06-28
194
-
195
- ### Melhorias
196
-
197
- - Adicionado suporte aos novos componentes de modal do Discord: `Label`, `File Upload`, `Radio Group`, `Checkbox Group` e `Checkbox`.
198
- - Modais agora preservam o `id` do componente `Label` ao gerar o payload.
199
- - Parser de componentes agora expoe `label` e `description` em `Components::Label`.
200
-
201
- ### Validacao
202
-
203
- - `bundle exec rspec spec/components_v2_spec.rb`: 15 exemplos, 0 falhas.
204
- - `ruby -c lib/onyxcord/webhooks/modal.rb`: sucesso.
205
- - `ruby -c lib/onyxcord/data/component.rb`: sucesso.
206
- - `ruby -c spec/components_v2_spec.rb`: sucesso.
207
-
208
- ## 1.1.5 - 2026-06-28
209
-
210
- ### Melhorias
211
-
212
- - Attachment uploads agora enviam metadata (`id`, `filename`) no payload JSON e usam chaves `files[N]` no multipart body, seguindo a especificacao da API do Discord.
213
- - Novos helpers `attachment_payload` e `multipart_body` adicionados nativamente em `API::Channel`, `API::Interaction` e `API::Webhook`.
214
- - Metodos afetados: `Channel.create_message`, `Channel.start_thread_in_forum_or_media_channel`, `Interaction.create_interaction_response`, `Webhook.token_edit_message` e `Webhook.token_execute_webhook`.
215
-
216
- ### Correcoes
217
-
218
- - Corrigido `Channel.create_message` para sanitizar o parametro `tts`, forçando `false` quando o valor nao e booleano.
219
-
220
- ## 1.1.4 - 2026-06-28
221
-
222
- ### Melhorias
223
-
224
- - `MediaGallery` agora aceita URLs diretas e hashes no builder, como `media_gallery('https://...')`, alem do formato em bloco.
225
- - `FileComponent`/`file_display` agora aceita a URL do attachment como primeiro argumento, como `file_display('attachment://arquivo.txt')`.
226
-
227
- ### Correcoes
228
-
229
- - Parser de `MediaGallery` e `FileUpload` ficou mais tolerante quando o payload nao traz `items` ou `values`.
230
-
231
- ### Validacao
232
-
233
- - `bundle exec rspec spec/components_v2_spec.rb`: 13 exemplos, 0 falhas.
234
-
235
- ## 1.1.3 - 2026-06-23
236
-
237
- ### Melhorias
238
-
239
- - Alterado o modo padrao do bot para `:hybrid`, mantendo suporte a handlers raw e eventos em objeto sem configuracao extra.
240
- - Adicionado `event_queue_size` para permitir fila de eventos com limite via `SizedQueue`.
241
- - Application commands agora usam o `EventExecutor`, evitando criacao direta de threads por interaction.
242
- - Adicionados `runtime_stats`, `cache_stats`, `prune_cache!` e `OnyxCord::API.rate_limiter_stats` para diagnostico de memoria e runtime.
243
- - Rate limiter REST agora expoe `stats`, `prune!` e limpeza automatica de bookkeeping antigo.
244
- - Voice recebeu limpeza mais segura de UDP, WebSocket, threads e leitura DCA com fechamento garantido de arquivo.
245
- - Dependencias principais receberam upper bounds conservadores para reduzir risco de quebra em releases futuras.
246
-
247
- ### Correcoes
248
-
249
- - Corrigido retry de respostas REST `202` para reutilizar a rota e o major parameter originais.
250
- - Removidos logs temporarios de interaction no caminho quente de dispatch.
251
- - Corrigido warning de spec causado por expectativa em cache de usuarios nulo.
252
-
253
- ### Validacao
254
-
255
- - `bundle exec rspec`: 456 exemplos, 0 falhas, 3 pendentes.
256
- - RuboCop nos arquivos alterados: sem offenses.
257
- - `gem build onyxcord.gemspec`: sucesso.
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- # Specify your gem's dependencies in onyxcord.gemspec
6
- gemspec name: 'onyxcord'
data/LICENSE.txt DELETED
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2015-2026 meew0
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
13
- all 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
21
- THE SOFTWARE.