serverless-ircd 0.5.0 → 0.7.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 (394) hide show
  1. package/.github/workflows/ci.yml +40 -3
  2. package/.github/workflows/deploy-aws.yml +1 -2
  3. package/.github/workflows/deploy-cf-tcp.yml +1 -5
  4. package/.github/workflows/deploy-cf.yml +1 -2
  5. package/.gitmodules +3 -0
  6. package/CHANGELOG.md +474 -0
  7. package/README.md +219 -22
  8. package/apps/aws-stack/README.md +33 -0
  9. package/apps/aws-stack/package.json +1 -1
  10. package/apps/aws-stack/src/aws-stack.ts +74 -9
  11. package/apps/aws-stack/tests/coverage-command.test.ts +155 -0
  12. package/apps/aws-stack/tests/stack.test.ts +2 -2
  13. package/apps/aws-stack/tests/synth-no-bundle.test.ts +129 -0
  14. package/apps/aws-stack/tests/vitest.setup.ts +18 -0
  15. package/apps/aws-stack/vitest.config.ts +3 -0
  16. package/apps/cf-tcp-container/package.json +1 -1
  17. package/apps/cf-tcp-container/src/config-loader.ts +6 -7
  18. package/apps/cf-tcp-container/src/container-server.ts +3 -0
  19. package/apps/cf-tcp-container/tests/config-loader.test.ts +10 -3
  20. package/apps/cf-tcp-container/wrangler.toml +1 -1
  21. package/apps/cf-worker/package.json +2 -1
  22. package/apps/cf-worker/src/origin-allowlist.ts +99 -0
  23. package/apps/cf-worker/src/worker.ts +89 -9
  24. package/apps/cf-worker/tests/fixtures/web-dist/app/index.html +18 -0
  25. package/apps/cf-worker/tests/fixtures/web-dist/index.html +18 -0
  26. package/apps/cf-worker/tests/origin-allowlist.test.ts +101 -0
  27. package/apps/cf-worker/tests/smoke.test.ts +28 -2
  28. package/apps/cf-worker/tests/ws-origin.test.ts +89 -0
  29. package/apps/cf-worker/vitest.config.ts +1 -1
  30. package/apps/cf-worker/wrangler.test.toml +23 -0
  31. package/apps/cf-worker/wrangler.toml +59 -3
  32. package/apps/local-cli/package.json +1 -1
  33. package/apps/local-cli/src/config-loader.ts +6 -6
  34. package/apps/local-cli/src/main.ts +20 -0
  35. package/apps/local-cli/src/server.ts +9 -7
  36. package/apps/local-cli/tests/e2e.test.ts +112 -28
  37. package/apps/local-cli/tests/tcp.test.ts +71 -19
  38. package/apps/local-cli/tests/ws-subprotocol.test.ts +12 -7
  39. package/apps/web/landing/index.html +217 -0
  40. package/apps/web/package.json +28 -0
  41. package/apps/web/scripts/build.mjs +125 -0
  42. package/apps/web/src/build-env.ts +43 -0
  43. package/apps/web/src/config-schema.ts +138 -0
  44. package/apps/web/static/config.json +28 -0
  45. package/apps/web/static/config.prod.json +28 -0
  46. package/apps/web/static/config.staging.json +28 -0
  47. package/apps/web/tests/build-env.test.ts +63 -0
  48. package/apps/web/tests/build-smoke.test.ts +103 -0
  49. package/apps/web/tests/config-schema.test.ts +432 -0
  50. package/apps/web/tests/workspace.test.ts +12 -0
  51. package/apps/web/tsconfig.json +10 -0
  52. package/apps/web/upstream/.browserslistrc +3 -0
  53. package/apps/web/upstream/.editorconfig +9 -0
  54. package/apps/web/upstream/.eslintignore +3 -0
  55. package/apps/web/upstream/.eslintrc.js +90 -0
  56. package/apps/web/upstream/.github/FUNDING.yml +12 -0
  57. package/apps/web/upstream/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  58. package/apps/web/upstream/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  59. package/apps/web/upstream/.github/workflows/push.yml +26 -0
  60. package/apps/web/upstream/.github/workflows/release.yml +33 -0
  61. package/apps/web/upstream/.github/workflows/release_manual.yml +55 -0
  62. package/apps/web/upstream/.prettierrc.js +9 -0
  63. package/apps/web/upstream/.stylelintignore +5 -0
  64. package/apps/web/upstream/.stylelintrc.js +21 -0
  65. package/apps/web/upstream/LICENSE +201 -0
  66. package/apps/web/upstream/README.md +76 -0
  67. package/apps/web/upstream/babel.config.js +25 -0
  68. package/apps/web/upstream/crowdin.yml +3 -0
  69. package/apps/web/upstream/index.html +35 -0
  70. package/apps/web/upstream/jest.config.js +7 -0
  71. package/apps/web/upstream/jsdoc.json +22 -0
  72. package/apps/web/upstream/package.json +80 -0
  73. package/apps/web/upstream/scripts/pre-commit +43 -0
  74. package/apps/web/upstream/src/components/App.vue +516 -0
  75. package/apps/web/upstream/src/components/AppSettings.vue +587 -0
  76. package/apps/web/upstream/src/components/AutoComplete.vue +284 -0
  77. package/apps/web/upstream/src/components/Avatar.vue +105 -0
  78. package/apps/web/upstream/src/components/AwayStatusIndicator.vue +77 -0
  79. package/apps/web/upstream/src/components/BufferKey.vue +121 -0
  80. package/apps/web/upstream/src/components/BufferSettings.vue +97 -0
  81. package/apps/web/upstream/src/components/Captcha.vue +85 -0
  82. package/apps/web/upstream/src/components/ChannelBanlist.vue +96 -0
  83. package/apps/web/upstream/src/components/ChannelInfo.vue +159 -0
  84. package/apps/web/upstream/src/components/ChannelInvitelist.vue +276 -0
  85. package/apps/web/upstream/src/components/ChannelList.vue +345 -0
  86. package/apps/web/upstream/src/components/Container.vue +401 -0
  87. package/apps/web/upstream/src/components/ContainerHeader.vue +522 -0
  88. package/apps/web/upstream/src/components/ControlInput.vue +1016 -0
  89. package/apps/web/upstream/src/components/LoadingAnimation.vue +104 -0
  90. package/apps/web/upstream/src/components/MediaViewer.vue +199 -0
  91. package/apps/web/upstream/src/components/MessageInfo.vue +192 -0
  92. package/apps/web/upstream/src/components/MessageList.vue +1028 -0
  93. package/apps/web/upstream/src/components/MessageListAvatar.vue +20 -0
  94. package/apps/web/upstream/src/components/MessageListMessageCompact.vue +361 -0
  95. package/apps/web/upstream/src/components/MessageListMessageInline.vue +257 -0
  96. package/apps/web/upstream/src/components/MessageListMessageModern.vue +430 -0
  97. package/apps/web/upstream/src/components/NetworkSettings.vue +528 -0
  98. package/apps/web/upstream/src/components/Nicklist.vue +309 -0
  99. package/apps/web/upstream/src/components/NicklistUser.vue +181 -0
  100. package/apps/web/upstream/src/components/NotConnected.vue +271 -0
  101. package/apps/web/upstream/src/components/SelfUser.vue +283 -0
  102. package/apps/web/upstream/src/components/ServerSelector.vue +162 -0
  103. package/apps/web/upstream/src/components/ServerView.vue +126 -0
  104. package/apps/web/upstream/src/components/SettingsAdvanced.vue +232 -0
  105. package/apps/web/upstream/src/components/SettingsAliases.vue +121 -0
  106. package/apps/web/upstream/src/components/Sidebar.vue +429 -0
  107. package/apps/web/upstream/src/components/SidebarAboutBuffer.vue +288 -0
  108. package/apps/web/upstream/src/components/SidebarState.vue +145 -0
  109. package/apps/web/upstream/src/components/StartupError.vue +35 -0
  110. package/apps/web/upstream/src/components/StateBrowser.vue +420 -0
  111. package/apps/web/upstream/src/components/StateBrowserBuffer.vue +124 -0
  112. package/apps/web/upstream/src/components/StateBrowserNetwork.vue +823 -0
  113. package/apps/web/upstream/src/components/StateBrowserUsermenu.vue +162 -0
  114. package/apps/web/upstream/src/components/TypingStatusIndicator.vue +34 -0
  115. package/apps/web/upstream/src/components/TypingUsersList.vue +56 -0
  116. package/apps/web/upstream/src/components/UrlEmbed.vue +149 -0
  117. package/apps/web/upstream/src/components/UserBox.vue +728 -0
  118. package/apps/web/upstream/src/components/inputtools/Emoji.vue +67 -0
  119. package/apps/web/upstream/src/components/inputtools/TextStyle.vue +142 -0
  120. package/apps/web/upstream/src/components/startups/CommonLayout.vue +208 -0
  121. package/apps/web/upstream/src/components/startups/CustomServer.vue +495 -0
  122. package/apps/web/upstream/src/components/startups/KiwiBnc.vue +361 -0
  123. package/apps/web/upstream/src/components/startups/Personal.vue +317 -0
  124. package/apps/web/upstream/src/components/startups/Welcome.vue +544 -0
  125. package/apps/web/upstream/src/components/startups/ZncLogin.vue +229 -0
  126. package/apps/web/upstream/src/components/utils/InputConfirm.vue +68 -0
  127. package/apps/web/upstream/src/components/utils/InputPrompt.vue +118 -0
  128. package/apps/web/upstream/src/components/utils/InputText.vue +172 -0
  129. package/apps/web/upstream/src/components/utils/IrcInput.vue +579 -0
  130. package/apps/web/upstream/src/components/utils/PluginWrapper.vue +26 -0
  131. package/apps/web/upstream/src/components/utils/TabbedView.vue +149 -0
  132. package/apps/web/upstream/src/components/utils/TransitionExpand.vue +97 -0
  133. package/apps/web/upstream/src/helpers/Colours.js +128 -0
  134. package/apps/web/upstream/src/helpers/IrcdDiffs.js +26 -0
  135. package/apps/web/upstream/src/helpers/Md5.js +193 -0
  136. package/apps/web/upstream/src/helpers/Misc.js +401 -0
  137. package/apps/web/upstream/src/helpers/TextFormatting.js +237 -0
  138. package/apps/web/upstream/src/libs/AliasRewriter.js +157 -0
  139. package/apps/web/upstream/src/libs/AudioManager.js +60 -0
  140. package/apps/web/upstream/src/libs/BouncerMiddleware.js +247 -0
  141. package/apps/web/upstream/src/libs/BouncerProvider.js +551 -0
  142. package/apps/web/upstream/src/libs/ChathistoryMiddleware.js +153 -0
  143. package/apps/web/upstream/src/libs/ConfigLoader.js +94 -0
  144. package/apps/web/upstream/src/libs/EmojiProvider.js +46 -0
  145. package/apps/web/upstream/src/libs/GlobalApi.js +346 -0
  146. package/apps/web/upstream/src/libs/IPC.js +51 -0
  147. package/apps/web/upstream/src/libs/InputHandler.js +921 -0
  148. package/apps/web/upstream/src/libs/IrcClient.js +1506 -0
  149. package/apps/web/upstream/src/libs/Logger.js +71 -0
  150. package/apps/web/upstream/src/libs/Message.js +169 -0
  151. package/apps/web/upstream/src/libs/MessageFormatter.js +364 -0
  152. package/apps/web/upstream/src/libs/MessageParser.js +249 -0
  153. package/apps/web/upstream/src/libs/Notifications.js +78 -0
  154. package/apps/web/upstream/src/libs/ServerConnection.js +270 -0
  155. package/apps/web/upstream/src/libs/ServerSession.js +102 -0
  156. package/apps/web/upstream/src/libs/SoundBleep.js +20 -0
  157. package/apps/web/upstream/src/libs/StatePersistence.js +90 -0
  158. package/apps/web/upstream/src/libs/ThemeManager.js +128 -0
  159. package/apps/web/upstream/src/libs/TypingMiddleware.js +105 -0
  160. package/apps/web/upstream/src/libs/WindowTitle.js +63 -0
  161. package/apps/web/upstream/src/libs/batchedAdd.js +74 -0
  162. package/apps/web/upstream/src/libs/bufferTools.js +177 -0
  163. package/apps/web/upstream/src/libs/polyfill/Element.closest.js +18 -0
  164. package/apps/web/upstream/src/libs/renderers/Html.js +113 -0
  165. package/apps/web/upstream/src/libs/settingTools.js +31 -0
  166. package/apps/web/upstream/src/libs/state/BufferState.js +703 -0
  167. package/apps/web/upstream/src/libs/state/NetworkState.js +158 -0
  168. package/apps/web/upstream/src/libs/state/UserState.js +89 -0
  169. package/apps/web/upstream/src/libs/state/common.js +26 -0
  170. package/apps/web/upstream/src/libs/state.js +961 -0
  171. package/apps/web/upstream/src/libs/storage/Local.js +51 -0
  172. package/apps/web/upstream/src/main.js +566 -0
  173. package/apps/web/upstream/src/res/autocompleteCommands.js +31 -0
  174. package/apps/web/upstream/src/res/configTemplates.js +373 -0
  175. package/apps/web/upstream/src/res/globalStyle.css +277 -0
  176. package/apps/web/upstream/src/res/kiwiLoadingLogo.png +0 -0
  177. package/apps/web/upstream/src/res/locales/app.af-ZA.po +1145 -0
  178. package/apps/web/upstream/src/res/locales/app.ar-SA.po +1145 -0
  179. package/apps/web/upstream/src/res/locales/app.bg-BG.po +1145 -0
  180. package/apps/web/upstream/src/res/locales/app.bs-BA.po +1145 -0
  181. package/apps/web/upstream/src/res/locales/app.ca-ES.po +1145 -0
  182. package/apps/web/upstream/src/res/locales/app.cs-CZ.po +1145 -0
  183. package/apps/web/upstream/src/res/locales/app.da-DK.po +1145 -0
  184. package/apps/web/upstream/src/res/locales/app.de-DE.po +1145 -0
  185. package/apps/web/upstream/src/res/locales/app.dev.po +1246 -0
  186. package/apps/web/upstream/src/res/locales/app.el-GR.po +1145 -0
  187. package/apps/web/upstream/src/res/locales/app.en-US.po +1145 -0
  188. package/apps/web/upstream/src/res/locales/app.es-419.po +1145 -0
  189. package/apps/web/upstream/src/res/locales/app.es-AR.po +1145 -0
  190. package/apps/web/upstream/src/res/locales/app.es-EM.po +536 -0
  191. package/apps/web/upstream/src/res/locales/app.es-ES.po +1145 -0
  192. package/apps/web/upstream/src/res/locales/app.es-US.po +1145 -0
  193. package/apps/web/upstream/src/res/locales/app.eu-ES.po +1145 -0
  194. package/apps/web/upstream/src/res/locales/app.fi-FI.po +1145 -0
  195. package/apps/web/upstream/src/res/locales/app.fr-FR.po +1145 -0
  196. package/apps/web/upstream/src/res/locales/app.gl-ES.po +1145 -0
  197. package/apps/web/upstream/src/res/locales/app.he-IL.po +1145 -0
  198. package/apps/web/upstream/src/res/locales/app.hi-IN.po +1145 -0
  199. package/apps/web/upstream/src/res/locales/app.hu-HU.po +1145 -0
  200. package/apps/web/upstream/src/res/locales/app.id-ID.po +1145 -0
  201. package/apps/web/upstream/src/res/locales/app.it-IT.po +1145 -0
  202. package/apps/web/upstream/src/res/locales/app.ja-JP.po +1145 -0
  203. package/apps/web/upstream/src/res/locales/app.ko-KR.po +1145 -0
  204. package/apps/web/upstream/src/res/locales/app.nl-NL.po +1145 -0
  205. package/apps/web/upstream/src/res/locales/app.no-NO.po +1145 -0
  206. package/apps/web/upstream/src/res/locales/app.pl-PL.po +1145 -0
  207. package/apps/web/upstream/src/res/locales/app.pt-BR.po +1145 -0
  208. package/apps/web/upstream/src/res/locales/app.pt-PT.po +1145 -0
  209. package/apps/web/upstream/src/res/locales/app.ro-RO.po +1145 -0
  210. package/apps/web/upstream/src/res/locales/app.ru-RU.po +1145 -0
  211. package/apps/web/upstream/src/res/locales/app.sl-SI.po +1145 -0
  212. package/apps/web/upstream/src/res/locales/app.sq-AL.po +1145 -0
  213. package/apps/web/upstream/src/res/locales/app.sr-SP.po +1145 -0
  214. package/apps/web/upstream/src/res/locales/app.sv-SE.po +1145 -0
  215. package/apps/web/upstream/src/res/locales/app.tr-TR.po +1145 -0
  216. package/apps/web/upstream/src/res/locales/app.uk-UA.po +1145 -0
  217. package/apps/web/upstream/src/res/locales/app.vi-VN.po +1145 -0
  218. package/apps/web/upstream/src/res/locales/app.zh-CN.po +1145 -0
  219. package/apps/web/upstream/src/res/locales/app.zh-TW.po +1145 -0
  220. package/apps/web/upstream/src/res/localesList.json +27 -0
  221. package/apps/web/upstream/src/res/logo.png +0 -0
  222. package/apps/web/upstream/src/thirdparty/about.html +43 -0
  223. package/apps/web/upstream/src/thirdparty/index.js +5 -0
  224. package/apps/web/upstream/src/thirdparty/kiwiirccom.vue +185 -0
  225. package/apps/web/upstream/static/config.json +28 -0
  226. package/apps/web/upstream/static/emoticons/smile.png +0 -0
  227. package/apps/web/upstream/static/favicon.png +0 -0
  228. package/apps/web/upstream/static/highlight.mp3 +0 -0
  229. package/apps/web/upstream/static/highlight.ogg +0 -0
  230. package/apps/web/upstream/static/locales/.gitignore +2 -0
  231. package/apps/web/upstream/static/plugins/customise.html.example +10 -0
  232. package/apps/web/upstream/static/themes/coffee/theme.css +145 -0
  233. package/apps/web/upstream/static/themes/common/base.css +1064 -0
  234. package/apps/web/upstream/static/themes/dark/theme.css +196 -0
  235. package/apps/web/upstream/static/themes/default/theme.css +92 -0
  236. package/apps/web/upstream/static/themes/elite/theme.css +248 -0
  237. package/apps/web/upstream/static/themes/grayfox/theme.css +143 -0
  238. package/apps/web/upstream/static/themes/nightswatch/theme.css +367 -0
  239. package/apps/web/upstream/static/themes/osprey/theme.css +115 -0
  240. package/apps/web/upstream/static/themes/radioactive/theme.css +1211 -0
  241. package/apps/web/upstream/static/themes/sky/theme.css +107 -0
  242. package/apps/web/upstream/tests/unit/BatchAdd.spec.js +174 -0
  243. package/apps/web/upstream/tests/unit/MessageParser.spec.js +125 -0
  244. package/apps/web/upstream/tests/unit/Misc.spec.js +24 -0
  245. package/apps/web/upstream/tests/unit/NetworkState.spec.js +58 -0
  246. package/apps/web/upstream/tests/unit/StartupError.spec.js +20 -0
  247. package/apps/web/upstream/vue.config.js +150 -0
  248. package/apps/web/upstream/yarn.lock +9767 -0
  249. package/apps/web/vitest.config.ts +13 -0
  250. package/biome.json +2 -0
  251. package/docs/ADR-001-pure-reducers-and-effect-system.md +74 -0
  252. package/docs/ADR-002-location-of-authority.md +82 -0
  253. package/docs/ADR-003-durable-object-sharding.md +110 -0
  254. package/docs/ADR-004-dynamodb-schema.md +96 -0
  255. package/docs/ADR-005-wss-only-transport-v1.md +83 -0
  256. package/docs/ADR-006-sasl-mechanism-scope.md +96 -0
  257. package/docs/ADR-007-deterministic-ports.md +82 -0
  258. package/docs/ADR-008-monorepo-tooling.md +60 -0
  259. package/docs/ADR-009-dual-transport-wss-and-irc-tls.md +138 -0
  260. package/docs/ADR-Index.md +15 -0
  261. package/docs/AWS-Adapter-Architecture.md +496 -0
  262. package/docs/AWS-Deployment.md +1275 -0
  263. package/docs/AWS-TCP-Deployment.md +410 -0
  264. package/docs/Cloudflare-Deployment-Guide.md +719 -0
  265. package/docs/Cloudflare-TCP-Deployment.md +510 -0
  266. package/docs/Home.md +16 -0
  267. package/docs/Observability.md +87 -0
  268. package/docs/PlanExtensions.md +812 -0
  269. package/docs/PlanIRCv3Websocket.md +503 -0
  270. package/docs/PlanWebClient.md +451 -0
  271. package/docs/Release-Process.md +443 -0
  272. package/docs/WebClientGuide.md +535 -0
  273. package/package.json +2 -2
  274. package/packages/aws-adapter/package.json +1 -1
  275. package/packages/aws-adapter/src/handlers/default.ts +3 -0
  276. package/packages/aws-adapter/src/handlers/nlb-stream.ts +9 -0
  277. package/packages/aws-adapter/src/serialize.ts +29 -1
  278. package/packages/aws-adapter/tests/account-store-dynamo.test.ts +49 -8
  279. package/packages/aws-adapter/tests/account-store.test.ts +4 -7
  280. package/packages/aws-adapter/tests/aws-harness.ts +5 -2
  281. package/packages/aws-adapter/tests/aws-integration.test.ts +8 -4
  282. package/packages/aws-adapter/tests/aws-runtime.test.ts +79 -0
  283. package/packages/aws-adapter/tests/config-loader.test.ts +11 -2
  284. package/packages/aws-adapter/tests/connect.test.ts +9 -9
  285. package/packages/aws-adapter/tests/disconnect-fanout.test.ts +3 -4
  286. package/packages/aws-adapter/tests/global-setup.ts +55 -30
  287. package/packages/aws-adapter/tests/gone-exception.test.ts +4 -9
  288. package/packages/aws-adapter/tests/handlers.test.ts +90 -4
  289. package/packages/aws-adapter/tests/message-store.test.ts +6 -5
  290. package/packages/aws-adapter/tests/nlb-stream.test.ts +60 -8
  291. package/packages/cf-adapter/package.json +2 -1
  292. package/packages/cf-adapter/src/connection-do.ts +3 -0
  293. package/packages/cf-adapter/src/serialize.ts +25 -4
  294. package/packages/cf-adapter/tests/cf-harness.ts +12 -1
  295. package/packages/cf-adapter/tests/cf-runtime.test.ts +269 -0
  296. package/packages/cf-adapter/tests/channel-do.test.ts +117 -0
  297. package/packages/cf-adapter/tests/config-loader.test.ts +49 -0
  298. package/packages/cf-adapter/tests/connection-do-pure.test.ts +91 -0
  299. package/packages/cf-adapter/tests/d1-account-store.test.ts +48 -0
  300. package/packages/cf-adapter/tests/registry-do.test.ts +104 -0
  301. package/packages/cf-adapter/tests/serialize.test.ts +308 -0
  302. package/packages/cf-adapter/vitest.config.ts +1 -1
  303. package/packages/in-memory-runtime/package.json +1 -1
  304. package/packages/irc-core/package.json +1 -1
  305. package/packages/irc-core/reports/mutation/mutation.html +342 -0
  306. package/packages/irc-core/src/caps/capabilities.ts +37 -3
  307. package/packages/irc-core/src/caps/index.ts +1 -0
  308. package/packages/irc-core/src/caps/sts.ts +84 -0
  309. package/packages/irc-core/src/commands/account-notify.ts +53 -0
  310. package/packages/irc-core/src/commands/away.ts +9 -3
  311. package/packages/irc-core/src/commands/cap.ts +23 -5
  312. package/packages/irc-core/src/commands/chathistory.ts +40 -11
  313. package/packages/irc-core/src/commands/index.ts +34 -0
  314. package/packages/irc-core/src/commands/isupport.ts +53 -0
  315. package/packages/irc-core/src/commands/mode.ts +8 -1
  316. package/packages/irc-core/src/commands/monitor.ts +327 -0
  317. package/packages/irc-core/src/commands/multiline.ts +256 -0
  318. package/packages/irc-core/src/commands/pre-away.ts +112 -0
  319. package/packages/irc-core/src/commands/privmsg.ts +19 -12
  320. package/packages/irc-core/src/commands/read-marker.ts +108 -0
  321. package/packages/irc-core/src/commands/registration.ts +8 -0
  322. package/packages/irc-core/src/commands/sasl.ts +24 -1
  323. package/packages/irc-core/src/commands/tagmsg.ts +71 -1
  324. package/packages/irc-core/src/commands/whois.ts +5 -0
  325. package/packages/irc-core/src/config.ts +65 -10
  326. package/packages/irc-core/src/effects.ts +14 -0
  327. package/packages/irc-core/src/ports.ts +389 -0
  328. package/packages/irc-core/src/protocol/index.ts +14 -0
  329. package/packages/irc-core/src/protocol/labeled-response.ts +133 -0
  330. package/packages/irc-core/src/protocol/numerics.ts +15 -0
  331. package/packages/irc-core/src/protocol/outbound.ts +16 -1
  332. package/packages/irc-core/src/protocol/standard-replies.ts +277 -0
  333. package/packages/irc-core/src/state/connection.ts +32 -1
  334. package/packages/irc-core/src/types.ts +112 -0
  335. package/packages/irc-core/stryker.commands.conf.json +1 -2
  336. package/packages/irc-core/tests/away-store.test.ts +73 -0
  337. package/packages/irc-core/tests/batch.test.ts +15 -0
  338. package/packages/irc-core/tests/caps/capabilities.test.ts +119 -2
  339. package/packages/irc-core/tests/caps/sts.test.ts +123 -0
  340. package/packages/irc-core/tests/commands/account-notify.test.ts +171 -0
  341. package/packages/irc-core/tests/commands/away.test.ts +85 -2
  342. package/packages/irc-core/tests/commands/cap.test.ts +165 -0
  343. package/packages/irc-core/tests/commands/chathistory.test.ts +148 -1
  344. package/packages/irc-core/tests/commands/echo-message.test.ts +9 -3
  345. package/packages/irc-core/tests/commands/isupport.test.ts +80 -0
  346. package/packages/irc-core/tests/commands/mode.test.ts +72 -0
  347. package/packages/irc-core/tests/commands/monitor.test.ts +411 -0
  348. package/packages/irc-core/tests/commands/multiline.test.ts +428 -0
  349. package/packages/irc-core/tests/commands/pre-away.test.ts +241 -0
  350. package/packages/irc-core/tests/commands/privmsg.test.ts +154 -3
  351. package/packages/irc-core/tests/commands/read-marker.test.ts +211 -0
  352. package/packages/irc-core/tests/commands/registration.test.ts +64 -0
  353. package/packages/irc-core/tests/commands/sasl.test.ts +116 -2
  354. package/packages/irc-core/tests/commands/tagmsg.test.ts +357 -0
  355. package/packages/irc-core/tests/commands/whois.test.ts +34 -0
  356. package/packages/irc-core/tests/config.test.ts +103 -13
  357. package/packages/irc-core/tests/labeled-response.test.ts +181 -0
  358. package/packages/irc-core/tests/message-tags.test.ts +114 -0
  359. package/packages/irc-core/tests/monitor-store.test.ts +200 -0
  360. package/packages/irc-core/tests/numerics.test.ts +13 -0
  361. package/packages/irc-core/tests/parser.test.ts +109 -0
  362. package/packages/irc-core/tests/read-marker-store.test.ts +108 -0
  363. package/packages/irc-core/tests/standard-replies.test.ts +412 -0
  364. package/packages/irc-core/tests/types.test.ts +27 -0
  365. package/packages/irc-server/package.json +1 -1
  366. package/packages/irc-server/src/actor.ts +450 -3
  367. package/packages/irc-server/src/dispatch.ts +108 -16
  368. package/packages/irc-server/tests/actor.test.ts +1432 -39
  369. package/packages/irc-server/tests/dispatch.test.ts +263 -2
  370. package/packages/irc-test-support/package.json +1 -1
  371. package/packages/irc-test-support/src/index.ts +6 -0
  372. package/packages/irc-test-support/src/scenarios.ts +24 -2
  373. package/packages/irc-test-support/src/test-config.ts +54 -0
  374. package/packages/irc-test-support/tests/test-config.test.ts +51 -0
  375. package/tools/ci-hardening/package.json +1 -1
  376. package/tools/ci-hardening/tests/ddb-local.test.ts +82 -0
  377. package/tools/load-test/package.json +33 -0
  378. package/tools/load-test/src/client.ts +351 -0
  379. package/tools/load-test/src/config.ts +313 -0
  380. package/tools/load-test/src/harness.ts +116 -0
  381. package/tools/load-test/src/main.ts +120 -0
  382. package/tools/load-test/src/metrics.ts +168 -0
  383. package/tools/load-test/src/report.ts +106 -0
  384. package/tools/load-test/tests/client.test.ts +212 -0
  385. package/tools/load-test/tests/config.test.ts +152 -0
  386. package/tools/load-test/tests/framing.test.ts +37 -0
  387. package/tools/load-test/tests/harness.test.ts +165 -0
  388. package/tools/load-test/tests/metrics.test.ts +174 -0
  389. package/tools/load-test/tests/report.test.ts +161 -0
  390. package/tools/load-test/tests/smoke.test.ts +67 -0
  391. package/tools/load-test/tsconfig.build.json +12 -0
  392. package/tools/load-test/tsconfig.test.json +10 -0
  393. package/tools/load-test/vitest.config.ts +29 -0
  394. package/tools/tcp-ws-forwarder/package.json +1 -1
@@ -0,0 +1,1145 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "MIME-Version: 1.0\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
6
+ "X-Crowdin-SourceKey: msgstr\n"
7
+ "Plural-Forms: nplurals=1; plural=0;\n"
8
+ "X-Crowdin-Project: kiwiirc\n"
9
+ "X-Crowdin-Project-ID: 275818\n"
10
+ "X-Crowdin-Language: zh-TW\n"
11
+ "X-Crowdin-File: /[kiwiirc.kiwiirc] master/src/res/locales/app.dev.po\n"
12
+ "X-Crowdin-File-ID: 21\n"
13
+ "Project-Id-Version: kiwiirc\n"
14
+ "Language-Team: Chinese Traditional\n"
15
+ "Language: zh_TW\n"
16
+ "PO-Revision-Date: 2023-06-14 17:21\n"
17
+
18
+ #: Start
19
+ msgid "start_button"
20
+ msgstr "開始"
21
+
22
+ #: Welcome to Kiwi IRC!
23
+ msgid "start_greeting"
24
+ msgstr "歡迎造訪 Kiwi IRC!"
25
+
26
+ #: Close
27
+ msgid "close"
28
+ msgstr "關閉"
29
+
30
+ #: Connect
31
+ msgid "connect"
32
+ msgstr "連線"
33
+
34
+ #: Connecting...
35
+ msgid "connecting"
36
+ msgstr "連線中…"
37
+
38
+ #: Connected
39
+ msgid "connected"
40
+ msgstr "已連線"
41
+
42
+ #: Settings
43
+ msgid "settings"
44
+ msgstr "設定"
45
+
46
+ #: Kiwi Settings
47
+ msgid "kiwi_settings"
48
+ msgstr "Kiwi 設定"
49
+
50
+ #: Channels
51
+ msgid "channels"
52
+ msgstr "頻道"
53
+
54
+ #: Access
55
+ msgid "access"
56
+ msgstr "存取"
57
+
58
+ #: Banned Users
59
+ msgid "banned"
60
+ msgstr "已遭禁止"
61
+
62
+ #: Invited Users
63
+ msgid "invited"
64
+ msgstr "已邀請的使用者"
65
+
66
+ #: Notifications
67
+ msgid "notifications"
68
+ msgstr "通知"
69
+
70
+ #: Username
71
+ msgid "username"
72
+ msgstr "使用者名稱"
73
+
74
+ #: Password
75
+ msgid "password"
76
+ msgstr "密碼"
77
+
78
+ #: Server Password
79
+ msgid "server_password"
80
+ msgstr "伺服器密碼"
81
+
82
+ #: I have a password
83
+ msgid "password_have"
84
+ msgstr "我有密碼"
85
+
86
+ #: Server
87
+ msgid "server"
88
+ msgstr "伺服器"
89
+
90
+ #: Nick
91
+ msgid "nick"
92
+ msgstr "暱稱"
93
+
94
+ #: Channel
95
+ msgid "channel"
96
+ msgstr "頻道"
97
+
98
+ #: Messages
99
+ msgid "messages"
100
+ msgstr "訊息"
101
+
102
+ #: Network
103
+ msgid "network"
104
+ msgstr "網路"
105
+
106
+ #: ZNC
107
+ msgid "znc"
108
+ msgstr "ZNC"
109
+
110
+ #: Logging in...
111
+ msgid "logging_in"
112
+ msgstr "登入中…"
113
+
114
+ #: Invalid login
115
+ msgid "invalid_login"
116
+ msgstr "無效的登入"
117
+
118
+ #: Login failed. Please try again or contact support
119
+ msgid "login_failed"
120
+ msgstr "Login failed. Please try again or contact support"
121
+
122
+ #: You are now logged in as '{{account}}'
123
+ msgid "logged_in"
124
+ msgstr "You are now logged in as '{{account}}'"
125
+
126
+ #: You have been logged out
127
+ msgid "logged_out"
128
+ msgstr "You have been logged out"
129
+
130
+ #: Search...
131
+ msgid "do_search"
132
+ msgstr "搜尋中…"
133
+
134
+ #: OK
135
+ msgid "ok"
136
+ msgstr "確定"
137
+
138
+ #: Cancel
139
+ msgid "cancel"
140
+ msgstr "取消"
141
+
142
+ #: Yes
143
+ msgid "yes"
144
+ msgstr "是"
145
+
146
+ #: No
147
+ msgid "no"
148
+ msgstr "否"
149
+
150
+ #: Not found.
151
+ msgid "not_found"
152
+ msgstr "找不到"
153
+
154
+ #: Warning!
155
+ msgid "warning"
156
+ msgstr "警告!"
157
+
158
+ #: This will close all Kiwi IRC conversations. Are you sure you want to close this window?
159
+ msgid "window_unload"
160
+ msgstr "這樣會關閉全部的 KiwiIRC 交談。你是否確定關閉本視窗?"
161
+
162
+ #: Real name
163
+ msgid "whois_realname"
164
+ msgstr "真實名稱"
165
+
166
+ #: Status
167
+ msgid "whois_status"
168
+ msgstr "狀態"
169
+
170
+ #: Is available
171
+ msgid "whois_status_available"
172
+ msgstr "可用"
173
+
174
+ #: Send a message
175
+ msgid "send_a_message"
176
+ msgstr "傳送訊息"
177
+
178
+ #: More information
179
+ msgid "more_information"
180
+ msgstr "更多資訊"
181
+
182
+ #: Ignore user
183
+ msgid "ignore_user"
184
+ msgstr "忽略使用者"
185
+
186
+ #: Channel
187
+ msgid "connection_channel"
188
+ msgstr "頻道"
189
+
190
+ #: Away
191
+ msgid "away"
192
+ msgstr "暫時離開"
193
+
194
+ #: {{count}} week
195
+ msgid "week"
196
+ msgstr "{{count}} 週"
197
+
198
+ #: {{count}} weeks
199
+ msgid "week_plural"
200
+ msgstr "{{count}} 週"
201
+
202
+ #: {{count}} day
203
+ msgid "day"
204
+ msgstr "{{count}} 天"
205
+
206
+ #: {{count}} days
207
+ msgid "day_plural"
208
+ msgstr "{{count}} 天"
209
+
210
+ #: {{count}} hour
211
+ msgid "hour"
212
+ msgstr "{{count}} 小時"
213
+
214
+ #: {{count}} hours
215
+ msgid "hour_plural"
216
+ msgstr "{{count}} 小時"
217
+
218
+ #: {{count}} minute
219
+ msgid "minute"
220
+ msgstr "{{count}} 分鐘"
221
+
222
+ #: {{count}} minutes
223
+ msgid "minute_plural"
224
+ msgstr "{{count}} 分鐘"
225
+
226
+ #: {{count}} second
227
+ msgid "second"
228
+ msgstr "{{count}} 秒"
229
+
230
+ #: {{count}} seconds
231
+ msgid "second_plural"
232
+ msgstr "{{count}} 秒"
233
+
234
+ #: General
235
+ msgid "settings_general"
236
+ msgstr "一般"
237
+
238
+ #: Language
239
+ msgid "settings_language"
240
+ msgstr "語言"
241
+
242
+ #: Theme
243
+ msgid "settings_theme"
244
+ msgstr "佈景主題"
245
+
246
+ #: Refresh Theme
247
+ msgid "refresh_theme"
248
+ msgstr "重新整理佈景主題"
249
+
250
+ #: Theme URL
251
+ msgid "settings_themeurl"
252
+ msgstr "佈景主題的網址"
253
+
254
+ #: Message Layout
255
+ msgid "settings_messagelayout"
256
+ msgstr "佈景主題配置"
257
+
258
+ #: Use monospace
259
+ msgid "settings_use_monospace"
260
+ msgstr "使用等寬字型"
261
+
262
+ #: Use Kiwi as my default IRC client
263
+ msgid "settings_default_handler"
264
+ msgstr "使用 Kiwi 作為我的預設 IRC 用戶端"
265
+
266
+ #: Traditional IRC layout
267
+ msgid "settings_layout_compact"
268
+ msgstr "傳統 IRC 配置"
269
+
270
+ #: Show autocomplete list
271
+ msgid "settings_show_autocomplete"
272
+ msgstr "顯示自動完成清單"
273
+
274
+ #: Chat Messages
275
+ msgid "settings_messages_title"
276
+ msgstr "聊天訊息"
277
+
278
+ #: Show timestamps
279
+ msgid "settings_timestamps"
280
+ msgstr "顯示時間戳記"
281
+
282
+ #: Use 24-hour timestamps
283
+ msgid "settings_24hour_timestamps"
284
+ msgstr "使用 24 小時格式時間戳記"
285
+
286
+ #: Show emoticons
287
+ msgid "settings_emoticons"
288
+ msgstr "顯示表情符號"
289
+
290
+ #: Block new Private messages
291
+ msgid "settings_block_private"
292
+ msgstr "封鎖新的私人訊息"
293
+
294
+ #: Messages in scrollback
295
+ msgid "settings_scrollback"
296
+ msgstr "Messages in scrollback"
297
+
298
+ #: Extra formatting
299
+ msgid "settings_formatting"
300
+ msgstr "額外格式"
301
+
302
+ #: Colour nicknames in messages
303
+ msgid "settings_nick_colouring"
304
+ msgstr "Colour nicknames in messages"
305
+
306
+ #: Share when I'm typing a message
307
+ msgid "settings_share_typing"
308
+ msgstr "Share when I'm typing a message"
309
+
310
+ #: Show inline image previews
311
+ msgid "settings_show_inline_previews"
312
+ msgstr "Show inline image previews"
313
+
314
+ #: Include join/part messages as activity
315
+ msgid "settings_show_joinpart"
316
+ msgstr "Include join/part messages as activity"
317
+
318
+ #: Mute sound notifications
319
+ msgid "settings_mute_sound"
320
+ msgstr "Mute sound notifications"
321
+
322
+ #: Highlight on words (space seperated)
323
+ msgid "settings_highlight"
324
+ msgstr "Highlight on words (space seperated)"
325
+
326
+ #: Aliases
327
+ msgid "settings_aliases"
328
+ msgstr "別名"
329
+
330
+ #: What are Aliases
331
+ msgid "what_are_aliases"
332
+ msgstr "何為別名?"
333
+
334
+ #: Send Message
335
+ msgid "send_message"
336
+ msgstr "傳送訊息"
337
+
338
+ #: Enter Channel Key
339
+ msgid "bufferkey_input"
340
+ msgstr "Enter Channel Key"
341
+
342
+ #: Rejoin {{channel}}
343
+ msgid "bufferkey_rejoin"
344
+ msgstr "重新加入 {{channel}}"
345
+
346
+ #: Notify me when
347
+ msgid "settings_notify"
348
+ msgstr "Notify me when"
349
+
350
+ #: All messages
351
+ msgid "settings_notify_all"
352
+ msgstr "所有訊息"
353
+
354
+ #: I am mentioned
355
+ msgid "settings_notify_mentioned"
356
+ msgstr "我被提及"
357
+
358
+ #: Never
359
+ msgid "settings_notify_never"
360
+ msgstr "Never"
361
+
362
+ #: Mute sounds
363
+ msgid "settings_notify_mute"
364
+ msgstr "靜音"
365
+
366
+ #: Hide unread message count
367
+ msgid "settings_show_message_counts"
368
+ msgstr "Hide unread message count"
369
+
370
+ #: Operator tools
371
+ msgid "operator_tools"
372
+ msgstr "Operator tools"
373
+
374
+ #: Default ban mask
375
+ msgid "settings_default_ban_mask"
376
+ msgstr "Default ban mask"
377
+
378
+ #: Default kick reason
379
+ msgid "settings_default_kick_reason"
380
+ msgstr "Default kick reason"
381
+
382
+ #: Advanced Settings
383
+ msgid "settings_advanced_title"
384
+ msgstr "進階設定"
385
+
386
+ #: Monsters be here, only click this button if you know what you are doing
387
+ msgid "settings_advanced_warning"
388
+ msgstr "Monsters be here, only click this button if you know what you are doing"
389
+
390
+ #: Enable Advanced Settings
391
+ msgid "settings_advanced_button"
392
+ msgstr "啟用進階設定"
393
+
394
+ #: Danger Zone: Changing some of these settings may break things!
395
+ msgid "settings_advanced_header"
396
+ msgstr "Danger Zone: Changing some of these settings may break things!"
397
+
398
+ #: Reset
399
+ msgid "settings_advanced_reset"
400
+ msgstr "重設"
401
+
402
+ #: Filter
403
+ msgid "settings_advanced_filter"
404
+ msgstr "篩選器"
405
+
406
+ #: Refresh banlist
407
+ msgid "bans_refresh"
408
+ msgstr "重新整理停權名單"
409
+
410
+ #: Banned user
411
+ msgid "bans_user"
412
+ msgstr "Banned user"
413
+
414
+ #: Banned by
415
+ msgid "bans_by"
416
+ msgstr "Banned by"
417
+
418
+ #: Refreshing banlist...
419
+ msgid "bans_refreshing"
420
+ msgstr "正在重新整理停權名單…"
421
+
422
+ #: Nobody is banned!
423
+ msgid "bans_nobody"
424
+ msgstr "Nobody is banned!"
425
+
426
+ #: Refresh invite list
427
+ msgid "invites_refresh"
428
+ msgstr "Refresh invite list"
429
+
430
+ #: Invited user
431
+ msgid "invites_user"
432
+ msgstr "Invited user"
433
+
434
+ #: Invited by
435
+ msgid "invites_by"
436
+ msgstr "Invited by"
437
+
438
+ #: Refreshing invite list...
439
+ msgid "invites_refreshing"
440
+ msgstr "Refreshing invite list..."
441
+
442
+ #: Nobody is invited!
443
+ msgid "invites_nobody"
444
+ msgstr "Nobody is invited!"
445
+
446
+ #: This is a public channel.
447
+ msgid "invite_public_channel"
448
+ msgstr "This is a public channel."
449
+
450
+ #: Only invited users can join.
451
+ msgid "invite_private_channel"
452
+ msgstr "Only invited users can join."
453
+
454
+ #: Only allow invited users
455
+ msgid "invite_set_private"
456
+ msgstr "Only allow invited users"
457
+
458
+ #: Allow anybody to join
459
+ msgid "invite_set_public"
460
+ msgstr "Allow anybody to join"
461
+
462
+ #: Only registered users can join
463
+ msgid "invite_registered_only"
464
+ msgstr "Only registered users can join"
465
+
466
+ #: Add invite
467
+ msgid "invite_add_invite"
468
+ msgstr "Add invite"
469
+
470
+ #: (Any registered user)
471
+ msgid "invite_any_registered"
472
+ msgstr "(Any registered user)"
473
+
474
+ #: Topic
475
+ msgid "channel_topic"
476
+ msgstr "主題"
477
+
478
+ #: Moderated chat
479
+ msgid "channel_moderated"
480
+ msgstr "Moderated chat"
481
+
482
+ #: Invite only
483
+ msgid "channel_invite"
484
+ msgstr "Invite only"
485
+
486
+ #: Hide this channel from lists
487
+ msgid "channel_secret"
488
+ msgstr "Hide this channel from lists"
489
+
490
+ #: Only moderators can change the topic
491
+ msgid "channel_moderated_topic"
492
+ msgstr "Only moderators can change the topic"
493
+
494
+ #: Block messages from outside this channel
495
+ msgid "channel_external"
496
+ msgstr "Block messages from outside this channel"
497
+
498
+ #: Click the refresh button to update the channel list
499
+ msgid "channel_list_fetch"
500
+ msgstr "Click the refresh button to update the channel list"
501
+
502
+ #: No channels found, try again later
503
+ msgid "channel_list_nonefound"
504
+ msgstr "No channels found, try again later"
505
+
506
+ #: Welcome to Kiwi IRC! Select a channel on the left.
507
+ msgid "container_welcome"
508
+ msgstr "Welcome to Kiwi IRC! Select a channel on the left."
509
+
510
+ #: Show statebrowser
511
+ msgid "container_statebrowser"
512
+ msgstr "Show statebrowser"
513
+
514
+ #: Hide Topic
515
+ msgid "hide_topic"
516
+ msgstr "隱藏主題"
517
+
518
+ #: Display Topic
519
+ msgid "display_topic"
520
+ msgstr "顯示主題"
521
+
522
+ #: Channel Settings
523
+ msgid "channel_settings"
524
+ msgstr "頻道設定"
525
+
526
+ #: Join Channel
527
+ msgid "container_join"
528
+ msgstr "加入頻道"
529
+
530
+ #: Not Connected
531
+ msgid "container_notconnected"
532
+ msgstr "未連線"
533
+
534
+ #: Private conversation with {{user}}
535
+ msgid "container_privmsg"
536
+ msgstr "Private conversation with {{user}}"
537
+
538
+ #: Send a message...
539
+ msgid "input_placeholder"
540
+ msgstr "傳送訊息"
541
+
542
+ #: Loading {{url}}...
543
+ msgid "media_loading"
544
+ msgstr "正在載入 {{url}}…"
545
+
546
+ #: Load previous messages
547
+ msgid "messages_load"
548
+ msgstr "Load previous messages"
549
+
550
+ #: Loading previous messages...
551
+ msgid "messages_loading"
552
+ msgstr "Loading previous messages..."
553
+
554
+ #: Unread Messages
555
+ msgid "unread_messages"
556
+ msgstr "未讀訊息"
557
+
558
+ #: Reply in private
559
+ msgid "reply_in_private"
560
+ msgstr "Reply in private"
561
+
562
+ #: Server details
563
+ msgid "settings_server_details"
564
+ msgstr "Server details"
565
+
566
+ #: Port
567
+ msgid "settings_port"
568
+ msgstr "連接埠"
569
+
570
+ #: Other networks on this ZNC account will be listed in the network list
571
+ msgid "settings_znc_other"
572
+ msgstr "Other networks on this ZNC account will be listed in the network list"
573
+
574
+ #: Your details
575
+ msgid "settings_your_details"
576
+ msgstr "Your details"
577
+
578
+ #: Nickname
579
+ msgid "settings_nickname"
580
+ msgstr "暱稱"
581
+
582
+ #: Advanced
583
+ msgid "settings_advanced"
584
+ msgstr "進階"
585
+
586
+ #: Encoding
587
+ msgid "settings_encoding"
588
+ msgstr "Encoding"
589
+
590
+ #: Show Raw
591
+ msgid "settings_show_raw"
592
+ msgstr "Show Raw"
593
+
594
+ #: Direct websocket
595
+ msgid "settings_use_websocket"
596
+ msgstr "Direct websocket"
597
+
598
+ #: Run commands when connected
599
+ msgid "settings_autorun"
600
+ msgstr "Run commands when connected"
601
+
602
+ #: Danger Zone
603
+ msgid "settings_danger"
604
+ msgstr "危險區域"
605
+
606
+ #: Remove network
607
+ msgid "settings_remove"
608
+ msgstr "移除網路"
609
+
610
+ #: {{count}} person here
611
+ msgid "person"
612
+ msgstr "{{count}} person here"
613
+
614
+ #: {{count}} people here
615
+ msgid "person_plural"
616
+ msgstr "{{count}} people here"
617
+
618
+ #: Filter users in channel
619
+ msgid "filter_users"
620
+ msgstr "Filter users in channel"
621
+
622
+ #: Reconnect to join {{channel}}
623
+ msgid "reconnect_channel"
624
+ msgstr "Reconnect to join {{channel}}"
625
+
626
+ #: Reconnect to {{network}} to start talking
627
+ msgid "reconnect_network"
628
+ msgstr "Reconnect to {{network}} to start talking"
629
+
630
+ #: Reconnect to continue talking with {{user}}
631
+ msgid "reconnect_query"
632
+ msgstr "Reconnect to continue talking with {{user}}"
633
+
634
+ #: You are not currently connected!
635
+ msgid "not_connected"
636
+ msgstr "You are not currently connected!"
637
+
638
+ #: Connection settings
639
+ msgid "reconnect_settings"
640
+ msgstr "連線設定"
641
+
642
+ #: We couldn't connect to that server :(
643
+ msgid "network_noconnect"
644
+ msgstr "We couldn't connect to that server :("
645
+
646
+ #: Connect To Network
647
+ msgid "network_connect"
648
+ msgstr "連線至網路"
649
+
650
+ #: Network Name
651
+ msgid "network_name"
652
+ msgstr "網路名稱"
653
+
654
+ #: Close options
655
+ msgid "side_close"
656
+ msgstr "關閉選項"
657
+
658
+ #: Channel options
659
+ msgid "side_options"
660
+ msgstr "頻道選項"
661
+
662
+ #: Your settings
663
+ msgid "side_settings"
664
+ msgstr "你的設定"
665
+
666
+ #: Show when people join
667
+ msgid "side_joins"
668
+ msgstr "Show when people join"
669
+
670
+ #: Show when channel topic changes
671
+ msgid "side_topics"
672
+ msgstr "Show when channel topic changes"
673
+
674
+ #: Show when users change their nicks
675
+ msgid "side_nick_changes"
676
+ msgstr "Show when users change their nicks"
677
+
678
+ #: Show when users change channel modes
679
+ msgid "side_mode_changes"
680
+ msgstr "Show when users change channel modes"
681
+
682
+ #: Extra message formatting
683
+ msgid "side_formatting"
684
+ msgstr "Extra message formatting"
685
+
686
+ #: Nick colours in the list"
687
+ msgid "side_colours"
688
+ msgstr "Nick colours in the list"
689
+
690
+ #: No buffer set
691
+ msgid "side_buffer"
692
+ msgstr "No buffer set"
693
+
694
+ #: There is no topic for this channel
695
+ msgid "no_topic_set"
696
+ msgstr "There is no topic for this channel"
697
+
698
+ #: About
699
+ msgid "about"
700
+ msgstr "關於"
701
+
702
+ #: Created at {{when}}
703
+ msgid "created_at"
704
+ msgstr "Created at {{when}}"
705
+
706
+ #: Highlights
707
+ msgid "highlights"
708
+ msgstr "Highlights"
709
+
710
+ #: Nobody has mentioned you yet...
711
+ msgid "nobody_mentioned_you"
712
+ msgstr "Nobody has mentioned you yet..."
713
+
714
+ #: There was an error starting Kiwi IRC :(
715
+ msgid "error_starting"
716
+ msgstr "There was an error starting Kiwi IRC :("
717
+
718
+ #: Make sure you have installed Kiwi IRC correctly and the configurartion can be loaded
719
+ msgid "error_installed"
720
+ msgstr "Make sure you have installed Kiwi IRC correctly and the configurartion can be loaded"
721
+
722
+ #: Leave {{name}}
723
+ msgid "state_leave"
724
+ msgstr "離開 {{name}}"
725
+
726
+ #: Your account
727
+ msgid "state_account"
728
+ msgstr "你的帳戶"
729
+
730
+ #: Your settings and networks will be remembered on this computer.
731
+ msgid "state_remembered"
732
+ msgstr "Your settings and networks will be remembered on this computer."
733
+
734
+ #: Forget me
735
+ msgid "state_forget"
736
+ msgstr "不要記住我的登入資訊"
737
+
738
+ #: No networks here yet.
739
+ msgid "state_network"
740
+ msgstr "No networks here yet."
741
+
742
+ #: Add one?
743
+ msgid "state_add"
744
+ msgstr "Add one?"
745
+
746
+ #: Available networks
747
+ msgid "state_available"
748
+ msgstr "可用網路"
749
+
750
+ #: Add Network
751
+ msgid "add_network"
752
+ msgstr "新增網路"
753
+
754
+ #: New Network
755
+ msgid "new_network"
756
+ msgstr "新的網路"
757
+
758
+ #: No Network
759
+ msgid "no_network"
760
+ msgstr "沒有網路"
761
+
762
+ #: Configure network
763
+ msgid "state_configure"
764
+ msgstr "設定網路"
765
+
766
+ #: Not connected.
767
+ msgid "state_disconnected"
768
+ msgstr "未連線。"
769
+
770
+ #: Join new #channel
771
+ msgid "state_join"
772
+ msgstr "加入新的 #頻道"
773
+
774
+ #: Filter Channels
775
+ msgid "filter_channels"
776
+ msgstr "篩選頻道"
777
+
778
+ #: Find More Channels
779
+ msgid "find_more_channels"
780
+ msgstr "尋找更多頻道"
781
+
782
+ #: Really leave the channel?
783
+ msgid "prompt_leave_channel"
784
+ msgstr "Really leave the channel?"
785
+
786
+ #: Really close all messages?
787
+ msgid "prompt_close_queries"
788
+ msgstr "Really close all messages?"
789
+
790
+ #: Really close this chat?
791
+ msgid "prompt_close_query"
792
+ msgstr "Really close this chat?"
793
+
794
+ #: Change nick
795
+ msgid "change_nick"
796
+ msgstr "變更暱稱"
797
+
798
+ #: Enter new nickname...
799
+ msgid "enter_new_nick"
800
+ msgstr "輸入新的暱稱…"
801
+
802
+ #: This is you!
803
+ msgid "user_you"
804
+ msgstr "這是你啦!"
805
+
806
+ #: Account name: {{user}}
807
+ msgid "user_account"
808
+ msgstr "帳戶名稱: {{user}}"
809
+
810
+ #: Real name: {{realname}}
811
+ msgid "user_realname"
812
+ msgstr "真實名稱: {{realname}}"
813
+
814
+ #: Is a bot
815
+ msgid "user_bot"
816
+ msgstr "是機器人"
817
+
818
+ #: Is available for help
819
+ msgid "user_help"
820
+ msgstr "Is avaiable for help"
821
+
822
+ #: Is an operator
823
+ msgid "user_op"
824
+ msgstr "Is an operator"
825
+
826
+ #: Connected to {{server}} {{info}}
827
+ msgid "user_server"
828
+ msgstr "Connected to {{server}} {{info}}"
829
+
830
+ #: Securely connected via SSL/TLS
831
+ msgid "user_secure"
832
+ msgstr "Securely connected via SSL/TLS"
833
+
834
+ #: In channels {{channels}}
835
+ msgid "user_channels"
836
+ msgstr "In channels {{channels}}"
837
+
838
+ #: Access level
839
+ msgid "user_access"
840
+ msgstr "存取等級"
841
+
842
+ #: Normal
843
+ msgid "user_normal"
844
+ msgstr "標準"
845
+
846
+ #: Kick from the channel
847
+ msgid "user_kick"
848
+ msgstr "Kick from the channel"
849
+
850
+ #: Ban from the channel
851
+ msgid "user_ban"
852
+ msgstr "Ban from the channel"
853
+
854
+ #: Ban and kick from the channel
855
+ msgid "user_kickban"
856
+ msgstr "Ban and kick from the channel"
857
+
858
+ #: Select a Channel
859
+ msgid "select_channel"
860
+ msgstr "Select a Channel"
861
+
862
+ #: Invite User
863
+ msgid "invite_user"
864
+ msgstr "Invite User"
865
+
866
+ #: Please specify a channel to join. eg /join #example
867
+ msgid "error_no_channel_join"
868
+ msgstr "Please specify a channel to join. eg /join #example"
869
+
870
+ #: The nickname '{{nick}}' is already in use!
871
+ msgid "error_nick_in_use"
872
+ msgstr "The nickname '{{nick}}' is already in use!"
873
+
874
+ #: The nickname '{{nick}}' is invalid!
875
+ msgid "error_nick_invalid"
876
+ msgstr "The nickname '{{nick}}' is invalid!"
877
+
878
+ #: You must enter a new nickname
879
+ msgid "error_empty_nick"
880
+ msgstr "你必須輸入新的暱稱"
881
+
882
+ #: Nickname must not start with a number
883
+ msgid "error_no_number"
884
+ msgstr "Nickname must not start with a number"
885
+
886
+ #: Unexpected error occurred
887
+ msgid "error_unexpected"
888
+ msgstr "Unexpected error occurred"
889
+
890
+ #: {{nick}} gives ops to {{target}}
891
+ msgid "modes_give_ops"
892
+ msgstr "{{nick}} gives ops to {{target}}"
893
+
894
+ #: {{nick}} takes ops from {{target}}
895
+ msgid "modes_take_ops"
896
+ msgstr "{{nick}} takes ops from {{target}}"
897
+
898
+ #: {{nick}} gives half-ops to {{target}}
899
+ msgid "modes_give_halfops"
900
+ msgstr "{{nick}} gives half-ops to {{target}}"
901
+
902
+ #: {{nick}} takes half-ops from {{target}}
903
+ msgid "modes_take_halfops"
904
+ msgstr "{{nick}} takes half-ops from {{target}}"
905
+
906
+ #: {{nick}} gives voice to {{target}}
907
+ msgid "modes_give_voice"
908
+ msgstr "{{nick}} gives voice to {{target}}"
909
+
910
+ #: {{nick}} takes voice from {{target}}
911
+ msgid "modes_take_voice"
912
+ msgstr "{{nick}} takes voice from {{target}}"
913
+
914
+ #: {{nick}} gives admin to {{target}}
915
+ msgid "modes_give_admin"
916
+ msgstr "{{nick}} gives admin to {{target}}"
917
+
918
+ #: {{nick}} takes admin from {{target}}
919
+ msgid "modes_take_admin"
920
+ msgstr "{{nick}} takes admin from {{target}}"
921
+
922
+ #: {{nick}} gives owner to {{target}}
923
+ msgid "modes_give_owner"
924
+ msgstr "{{nick}} gives owner to {{target}}"
925
+
926
+ #: {{nick}} takes owner from {{target}}
927
+ msgid "modes_take_owner"
928
+ msgstr "{{nick}} takes owner from {{target}}"
929
+
930
+ #: {{nick}} has banned {{target}}
931
+ msgid "modes_gives_ban"
932
+ msgstr "{{nick}} has banned {{target}}"
933
+
934
+ #: {{nick}} has unbanned {{target}}
935
+ msgid "modes_takes_ban"
936
+ msgstr "{{nick}} has unbanned {{target}}"
937
+
938
+ #: {{nick}} sets {{mode}} on {{target}}
939
+ msgid "modes_other"
940
+ msgstr "{{nick}} sets {{mode}} on {{target}}"
941
+
942
+ #: Send a message
943
+ msgid "command_msg"
944
+ msgstr "傳送訊息"
945
+
946
+ #: Do something physical
947
+ msgid "command_action"
948
+ msgstr "Do something physical"
949
+
950
+ #: Join a channel
951
+ msgid "command_join"
952
+ msgstr "加入頻道"
953
+
954
+ #: Leave a channel
955
+ msgid "command_part"
956
+ msgstr "離開頻道"
957
+
958
+ #: Leave, then re-join a channel
959
+ msgid "command_cycle"
960
+ msgstr "Leave, then re-join a channel"
961
+
962
+ #: Change your nickname
963
+ msgid "command_nick"
964
+ msgstr "變更你的暱稱"
965
+
966
+ #: Start a private conversation with someone
967
+ msgid "command_query"
968
+ msgstr "Start a private conversation with someone"
969
+
970
+ #: Invite somebody into the channel
971
+ msgid "command_invite"
972
+ msgstr "Invite somebody into the channel"
973
+
974
+ #: Set the topic for this channel
975
+ msgid "command_topic"
976
+ msgstr "Set the topic for this channel"
977
+
978
+ #: Send a notice
979
+ msgid "command_notice"
980
+ msgstr "傳送通知"
981
+
982
+ #: Send a raw command to the IRC server
983
+ msgid "command_quote"
984
+ msgstr "Send a raw command to the IRC server"
985
+
986
+ #: Kick somebody from the channel
987
+ msgid "command_kick"
988
+ msgstr "Kick somebody from the channel"
989
+
990
+ #: Clear all messages from this window
991
+ msgid "command_clear"
992
+ msgstr "Clear all messages from this window"
993
+
994
+ #: Send a CTCP command to somebody
995
+ msgid "command_ctcp"
996
+ msgstr "Send a CTCP command to somebody"
997
+
998
+ #: Disconnect from the IRC server
999
+ msgid "command_quit"
1000
+ msgstr "Disconnect from the IRC server"
1001
+
1002
+ #: Connect to a new IRC network
1003
+ msgid "command_server"
1004
+ msgstr "連線至新的 IRC 網路"
1005
+
1006
+ #: Request information on somebody
1007
+ msgid "command_whois"
1008
+ msgstr "Request information on somebody"
1009
+
1010
+ #: Request information on somebody that disconnected recently
1011
+ msgid "command_whowas"
1012
+ msgstr "Request information on somebody that disconnected recently"
1013
+
1014
+ #: Set yourself as away
1015
+ msgid "command_away"
1016
+ msgstr "Set yourself as away"
1017
+
1018
+ #: Set yourself as active
1019
+ msgid "command_back"
1020
+ msgstr "Set yourself as active"
1021
+
1022
+ #: Change your connection encoding
1023
+ msgid "command_encoding"
1024
+ msgstr "Change your connection encoding"
1025
+
1026
+ #: Ignore messages from somebody
1027
+ msgid "command_ignore"
1028
+ msgstr "Ignore messages from somebody"
1029
+
1030
+ #: Stop ignoring somebody
1031
+ msgid "command_unignore"
1032
+ msgstr "Stop ignoring somebody"
1033
+
1034
+ #: Roll a Dice
1035
+ msgid "command_dice"
1036
+ msgstr "擲骰子"
1037
+
1038
+ #: Rolls a {{sides}} sided dice and gets {{number}}
1039
+ msgid "dice_roll"
1040
+ msgstr "Rolls a {{sides}} sided dice and gets {{number}}"
1041
+
1042
+ #: You were mentioned in {{channel}}
1043
+ msgid "notification_mentioned"
1044
+ msgstr "You were mentioned in {{channel}}"
1045
+
1046
+ #: Your IRC client
1047
+ msgid "personal_client"
1048
+ msgstr "你的 IRC 客户端。"
1049
+
1050
+ #: Add your networks. Join your channels.
1051
+ msgid "personal_addjoin"
1052
+ msgstr "Add your networks. Join your channels."
1053
+
1054
+ #: They will be here when you come back.
1055
+ msgid "personal_return"
1056
+ msgstr "They will be here when you come back."
1057
+
1058
+ #: Add a Network
1059
+ msgid "personal_add"
1060
+ msgstr "新增網路"
1061
+
1062
+ #: You are trying to connect to {{network}}
1063
+ msgid "personal_connect_to"
1064
+ msgstr "You are trying to connect to {{network}}"
1065
+
1066
+ #: Network has been added to your existing Kiwi window.
1067
+ msgid "personal_added_to_existing"
1068
+ msgstr "Network has been added to your existing Kiwi window."
1069
+
1070
+ #: Add network to existing Kiwi window
1071
+ msgid "personal_add_existing_tab"
1072
+ msgstr "Add network to existing Kiwi window"
1073
+
1074
+ #: Temporarily connect to this network
1075
+ msgid "personal_connect_temporary"
1076
+ msgstr "Temporarily connect to this network"
1077
+
1078
+ #: Saved networks
1079
+ msgid "personal_saved"
1080
+ msgstr "儲存的網路"
1081
+
1082
+ #: Kiwi IRC (next gen) - Rizon preview
1083
+ msgid "rizon_title"
1084
+ msgstr "Kiwi IRC (next gen) - Rizon preview"
1085
+
1086
+ #: Direct websockets. No Kiwi server or webirc involved.
1087
+ msgid "rizon_websockets"
1088
+ msgstr "Direct websockets. No Kiwi server or webirc involved."
1089
+
1090
+ #: (Thanks to Adam @Rizon for the development websocket server support!)
1091
+ msgid "rizon_thanks"
1092
+ msgstr "(Thanks to Adam @Rizon for the development websocket server support!)"
1093
+
1094
+ #: Give the developer version of Kiwi IRC a try!
1095
+ msgid "rizon_dev"
1096
+ msgstr "Give the developer version of Kiwi IRC a try!"
1097
+
1098
+ #: Disconnected
1099
+ msgid "disconnected"
1100
+ msgstr "已中斷連線"
1101
+
1102
+ #: Connected to {{network}}!
1103
+ msgid "connected_to"
1104
+ msgstr "已連線至 {{network}}!"
1105
+
1106
+ #: {{nick}} has joined
1107
+ msgid "has_joined"
1108
+ msgstr "{{nick}} 已加入"
1109
+
1110
+ #: {{nick}} kicked you from {{channel}}
1111
+ msgid "kicked_you_from"
1112
+ msgstr "{{nick}} kicked you from {{channel}}"
1113
+
1114
+ #: {{nick}} was kicked from {{channel}} by {{chanop}}
1115
+ msgid "was_kicked_from"
1116
+ msgstr "{{nick}} was kicked from {{channel}} by {{chanop}}"
1117
+
1118
+ #: {{nick}} has left
1119
+ msgid "has_left"
1120
+ msgstr "{{nick}} 已離開"
1121
+
1122
+ #: {{nick}} invited you to join {{channel}}
1123
+ msgid "invited_you"
1124
+ msgstr "{{nick}} invited you to join {{channel}}"
1125
+
1126
+ #: {{nick}} invited {{invited}} to join {{channel}}
1127
+ msgid "invited_other"
1128
+ msgstr "{{nick}} invited {{invited}} to join {{channel}}"
1129
+
1130
+ #: You invited {{invited}} to join {{channel}}
1131
+ msgid "invited_inviter"
1132
+ msgstr "You invited {{invited}} to join {{channel}}"
1133
+
1134
+ #: Nickname {{nick}} is already in use. Trying {{newnick}}...
1135
+ msgid "nick_in_use_retrying"
1136
+ msgstr "Nickname {{nick}} is already in use. Trying {{newnick}}..."
1137
+
1138
+ #: {{nick}} is now known as {{newnick}}
1139
+ msgid "now_known_as"
1140
+ msgstr "{{nick}} is now known as {{newnick}}"
1141
+
1142
+ #: {{nick}} changed the topic to: {{topic}}
1143
+ msgid "changed_topic_to"
1144
+ msgstr "{{nick}} changed the topic to: {{topic}}"
1145
+