From c66e48d3ccda30e1c10cddc23054ec4dda1f28b4 Mon Sep 17 00:00:00 2001 From: cocobo1 <122374431+C0C0B01@users.noreply.github.com> Date: Mon, 28 Jul 2025 12:28:49 +0100 Subject: [PATCH 1/5] docs(readme): added notice on not being a Lumi remake --- README.md | 109 ++---------------------------------------------------- 1 file changed, 3 insertions(+), 106 deletions(-) diff --git a/README.md b/README.md index 69d2fbb..e048039 100644 --- a/README.md +++ b/README.md @@ -1,110 +1,7 @@ -
- Wintry logo -

A Discord mod built with simplicity and a seamless experience in mind.

+## This is **NOT** a Lumi remake -[![Version](https://img.shields.io/github/package-json/v/amsyarasyiq/wintry?logo=github)](https://github.com/amsyarasyiq/wintry/releases/latest) -[![Discord](https://img.shields.io/discord/1394286025026572310?logo=discord&logoColor=white&color=5865F2)](https://discord.gg/ATrscNAMpE) -[![Code Size](https://img.shields.io/github/languages/code-size/amsyarasyiq/wintry?color=blue)](https://github.com/amsyarasyiq/wintry) -[![License](https://img.shields.io/github/license/amsyarasyiq/wintry?color=007ec6)](https://github.com/amsyarasyiq/wintry/blob/main/LICENSE) - -
- ---- - -> [!IMPORTANT] -> ### Experimental Project Notice -> Wintry is an experimental and in-progress project. Development is sporadic, and many features are incomplete or subject to change at any time. -> -> While forks of this project may exist, we recommend reading the [Forks](#forks) section to better understand the project's stance on forking. - -## Features -Wintry enhances your Discord experience through a powerful, first-party plugin system. Key plugins include: - -- Experiments - Unlocks hidden and experimental Discord features. -- ExpressionUtils - Easily clone, copy links for your favorite emotes. -- ChatBubbles - Add chat-style bubbles to your messages in conversations. -- NoTrack - Disables Discord's built-in analytics and tracking for improved privacy. -- ...many more coming down the road! - -## Installation - -The recommended way to install Wintry on Android is with the [**Wintry Manager**](https://github.com/wtcord/wt-manager). - -> [!NOTE] -> Wintry is currently built for and officially supported only on **Android**. Supporting iOS is theoretically possible, but the project lacks a dedicated maintainer for it. - -## Contributing -We welcome contributions from the community! Whether you're fixing bugs, adding new features, or improving documentation, your help is greatly appreciated. Please make sure to review our [contributing guidelines](./CONTRIBUTING.md) before getting started. - -## FAQs - -
- - What's the motive of this project? - - -Wintry is an attempt to bring back the proof-of-concept version of Pyoncord while staying true to its goal of being something different. It takes inspiration from existing projects especially from Vencord but follows its own direction. - -> So, what exactly is 'different' this time? - -Pyoncord's ultimate goal was to achieve **lazy Metro module acquisition/patching** for performance benefits. After discovering a way to achieve similar benefits while retaining the existing mod's infrastructure, Pyoncord reached its conclusion, and Bunny took over. - -However, while developing Pyoncord, there were several other goals besides implementing the lazy module system, such as: -- **Vencord-like experience** (built-in plugins) -- **Platform-focused patching** (to access/patch native stuff) - -These goals were fundamentally incompatible with the existing infrastructure, so starting from the ground up was necessary. - -
- -
- - Is Wintry a good replacement? - - -Depends. If you value plugin stability over variety, Wintry may be a good replacement for you. Wintry is first-party focused, meaning there may be fewer plugins available compared to other client mods, but they will be more stable and reliable. -
- -
- - Will Wintry ever support third-party plugins? - - -**Maybe.** However, Wintry will stay first-party focused, so even if it ever supports third-party plugins, the experience won’t be the same as with other third-party-focused client mods. Discovering and installing third-party plugins will be more difficult, and Wintry will not provide technical support for them. This feature, if introduced, would exist primarily for advanced users. - -
- -
- - Why does Wintry prioritize first-party plugins? - - -Wintry prioritizes first-party plugins to ensure security, compatibility, and stability. Third-party plugins can introduce risks such as security vulnerabilities, performance issues, and inconsistencies in the user experience. By focusing on first-party development, Wintry can maintain a more controlled and reliable environment. - -There are definitely drawbacks to this idea, such as introducing bloat since all plugins are built-in whether you like it or not, or having less plugin variety since all plugins need to be vetted for quality. -
- -
- - If third-party plugins are allowed in the future, what restrictions will there be? - - -If Wintry ever supports third-party plugins, users will be able to install whatever they want, but they must acknowledge that: -- Wintry will not provide technical support for third-party plugins. -- Users must manually discover, install and manage their third-party plugins. -- No guarantees will be made regarding security, stability, or compatibility. -
- -## Notices - -### Forks -This project is open source and may be forked in accordance with its license. If you intend to fork Wintry, we kindly ask that it be done primarily with the goal of contributing back to this repository. - -While personal experiments and contributions are welcome, rebranded distributions that closely follow Wintry’s codebase are discouraged until the project has reached a stable status, or is officially discontinued. +This is a repo made for contributing some plugins made for wintry to the main project. ### License -Wintry is primarily licensed under the [**GNU General Public License v3 (GPL-3)**](http://www.gnu.org/copyleft/gpl.html). Please note that some components may be subject to different licenses; refer to the source files for full details. - -### **Disclaimer** -Using *any* Discord client mod, including Wintry, is against Discord's Terms of Service. However, there have been no reports of Discord enforcing this rule unless there is actual API abuse, which Wintry opposes. Using Wintry should be as safe as using other client mods, if not safer. +Wintry is primarily licensed under the [**GNU General Public License v3 (GPL-3)**](http://www.gnu.org/copyleft/gpl.html). Please note that some components may be subject to different licenses; refer to the source files for full details. \ No newline at end of file From 558c95dc5f2db8635f912396a30ae546b71a4ed0 Mon Sep 17 00:00:00 2001 From: cocobo1 <122374431+C0C0B01@users.noreply.github.com> Date: Mon, 28 Jul 2025 12:29:17 +0100 Subject: [PATCH 2/5] docs(readme): update naming --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e048039..79860fb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## This is **NOT** a Lumi remake -This is a repo made for contributing some plugins made for wintry to the main project. +This is a repo made for contributing some plugins made for Lumi to the original Wintry project. ### License From 8b4bac2e9ee5da688f75d0e545a30acb5094b4ee Mon Sep 17 00:00:00 2001 From: cocobo1 Date: Mon, 28 Jul 2025 17:35:10 +0300 Subject: [PATCH 3/5] feat(plugins): added dashless and always-trust plugins from the archived lumi project --- src/plugins/always-trust/index.ts | 19 ++++++++++++ src/plugins/dashless/index.ts | 48 +++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/plugins/always-trust/index.ts create mode 100644 src/plugins/dashless/index.ts diff --git a/src/plugins/always-trust/index.ts b/src/plugins/always-trust/index.ts new file mode 100644 index 0000000..50b532f --- /dev/null +++ b/src/plugins/always-trust/index.ts @@ -0,0 +1,19 @@ +import { Dev } from "@data/constants"; +import { definePlugin } from "#plugin-context"; +import { byStoreName } from "@metro/common/stores"; + +export default definePlugin({ + name: "Always Trust", + description: "Prevents Discord's trust website confirmations", + authors: [Dev.cocobo1], + + patches: [ + { + id: "MaskedLinkStore", + target: byStoreName("MaskedLinkStore"), + patch(module, patcher) { + patcher.instead(module, "isTrustedDomain", () => true); + }, + }, + ], +}); diff --git a/src/plugins/dashless/index.ts b/src/plugins/dashless/index.ts new file mode 100644 index 0000000..b2c0687 --- /dev/null +++ b/src/plugins/dashless/index.ts @@ -0,0 +1,48 @@ +import { ReactNative } from "src/metro/common/libraries/index.ts"; +import { after } from "src/patcher/index.ts"; +import { definePlugin } from "#plugin-context"; +import { Dev } from "@data/constants"; + +const { View } = ReactNative; + +const traverseAndModify = (node: any): any => { + if (typeof node === "string") { + return node.replace(/-/g, " "); + } + if (Array.isArray(node)) { + return node.map(traverseAndModify); + } + if (node && typeof node === "object" && node.props && node.props.children) { + return { + ...node, + props: { + ...node.props, + children: traverseAndModify(node.props.children), + }, + }; + } + return node; +}; + +let unpatchRender: () => void; + +export default definePlugin({ + name: "Dashless", + description: "Changes dashes in text channel names to spaces", + authors: [Dev.cocobo1, + { + "name": "Awesomegamergame", + "id": 504401951623086081n + }], + start() { + unpatchRender = after(View, "render", (_, res) => { + return traverseAndModify(res); + }); + }, + + cleanup() { + unpatchRender?.(); + } +}); + + From 947bae9cc587351f7cd5126a165f76b7309d2531 Mon Sep 17 00:00:00 2001 From: cocobo1 <122374431+C0C0B01@users.noreply.github.com> Date: Mon, 28 Jul 2025 18:59:33 +0300 Subject: [PATCH 4/5] docs(readme): restore original readme --- README.md | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 79860fb..69d2fbb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,110 @@ -## This is **NOT** a Lumi remake +
+ Wintry logo +

A Discord mod built with simplicity and a seamless experience in mind.

-This is a repo made for contributing some plugins made for Lumi to the original Wintry project. +[![Version](https://img.shields.io/github/package-json/v/amsyarasyiq/wintry?logo=github)](https://github.com/amsyarasyiq/wintry/releases/latest) +[![Discord](https://img.shields.io/discord/1394286025026572310?logo=discord&logoColor=white&color=5865F2)](https://discord.gg/ATrscNAMpE) +[![Code Size](https://img.shields.io/github/languages/code-size/amsyarasyiq/wintry?color=blue)](https://github.com/amsyarasyiq/wintry) +[![License](https://img.shields.io/github/license/amsyarasyiq/wintry?color=007ec6)](https://github.com/amsyarasyiq/wintry/blob/main/LICENSE) + +
+ +--- + +> [!IMPORTANT] +> ### Experimental Project Notice +> Wintry is an experimental and in-progress project. Development is sporadic, and many features are incomplete or subject to change at any time. +> +> While forks of this project may exist, we recommend reading the [Forks](#forks) section to better understand the project's stance on forking. + +## Features +Wintry enhances your Discord experience through a powerful, first-party plugin system. Key plugins include: + +- Experiments - Unlocks hidden and experimental Discord features. +- ExpressionUtils - Easily clone, copy links for your favorite emotes. +- ChatBubbles - Add chat-style bubbles to your messages in conversations. +- NoTrack - Disables Discord's built-in analytics and tracking for improved privacy. +- ...many more coming down the road! + +## Installation + +The recommended way to install Wintry on Android is with the [**Wintry Manager**](https://github.com/wtcord/wt-manager). + +> [!NOTE] +> Wintry is currently built for and officially supported only on **Android**. Supporting iOS is theoretically possible, but the project lacks a dedicated maintainer for it. + +## Contributing +We welcome contributions from the community! Whether you're fixing bugs, adding new features, or improving documentation, your help is greatly appreciated. Please make sure to review our [contributing guidelines](./CONTRIBUTING.md) before getting started. + +## FAQs + +
+ + What's the motive of this project? + + +Wintry is an attempt to bring back the proof-of-concept version of Pyoncord while staying true to its goal of being something different. It takes inspiration from existing projects especially from Vencord but follows its own direction. + +> So, what exactly is 'different' this time? + +Pyoncord's ultimate goal was to achieve **lazy Metro module acquisition/patching** for performance benefits. After discovering a way to achieve similar benefits while retaining the existing mod's infrastructure, Pyoncord reached its conclusion, and Bunny took over. + +However, while developing Pyoncord, there were several other goals besides implementing the lazy module system, such as: +- **Vencord-like experience** (built-in plugins) +- **Platform-focused patching** (to access/patch native stuff) + +These goals were fundamentally incompatible with the existing infrastructure, so starting from the ground up was necessary. + +
+ +
+ + Is Wintry a good replacement? + + +Depends. If you value plugin stability over variety, Wintry may be a good replacement for you. Wintry is first-party focused, meaning there may be fewer plugins available compared to other client mods, but they will be more stable and reliable. +
+ +
+ + Will Wintry ever support third-party plugins? + + +**Maybe.** However, Wintry will stay first-party focused, so even if it ever supports third-party plugins, the experience won’t be the same as with other third-party-focused client mods. Discovering and installing third-party plugins will be more difficult, and Wintry will not provide technical support for them. This feature, if introduced, would exist primarily for advanced users. + +
+ +
+ + Why does Wintry prioritize first-party plugins? + + +Wintry prioritizes first-party plugins to ensure security, compatibility, and stability. Third-party plugins can introduce risks such as security vulnerabilities, performance issues, and inconsistencies in the user experience. By focusing on first-party development, Wintry can maintain a more controlled and reliable environment. + +There are definitely drawbacks to this idea, such as introducing bloat since all plugins are built-in whether you like it or not, or having less plugin variety since all plugins need to be vetted for quality. +
+ +
+ + If third-party plugins are allowed in the future, what restrictions will there be? + + +If Wintry ever supports third-party plugins, users will be able to install whatever they want, but they must acknowledge that: +- Wintry will not provide technical support for third-party plugins. +- Users must manually discover, install and manage their third-party plugins. +- No guarantees will be made regarding security, stability, or compatibility. +
+ +## Notices + +### Forks +This project is open source and may be forked in accordance with its license. If you intend to fork Wintry, we kindly ask that it be done primarily with the goal of contributing back to this repository. + +While personal experiments and contributions are welcome, rebranded distributions that closely follow Wintry’s codebase are discouraged until the project has reached a stable status, or is officially discontinued. ### License -Wintry is primarily licensed under the [**GNU General Public License v3 (GPL-3)**](http://www.gnu.org/copyleft/gpl.html). Please note that some components may be subject to different licenses; refer to the source files for full details. \ No newline at end of file +Wintry is primarily licensed under the [**GNU General Public License v3 (GPL-3)**](http://www.gnu.org/copyleft/gpl.html). Please note that some components may be subject to different licenses; refer to the source files for full details. + +### **Disclaimer** +Using *any* Discord client mod, including Wintry, is against Discord's Terms of Service. However, there have been no reports of Discord enforcing this rule unless there is actual API abuse, which Wintry opposes. Using Wintry should be as safe as using other client mods, if not safer. From e1c96bef0a234727190b67adcbe7a068f9e06f64 Mon Sep 17 00:00:00 2001 From: cocobo1 Date: Tue, 16 Sep 2025 11:08:51 +0300 Subject: [PATCH 5/5] refactor(plugins): rename AlwaysTrust and remove Dashless --- src/plugins/always-trust/index.ts | 10 +++++-- src/plugins/dashless/index.ts | 48 ------------------------------- 2 files changed, 7 insertions(+), 51 deletions(-) delete mode 100644 src/plugins/dashless/index.ts diff --git a/src/plugins/always-trust/index.ts b/src/plugins/always-trust/index.ts index 50b532f..05f926d 100644 --- a/src/plugins/always-trust/index.ts +++ b/src/plugins/always-trust/index.ts @@ -1,11 +1,15 @@ -import { Dev } from "@data/constants"; import { definePlugin } from "#plugin-context"; import { byStoreName } from "@metro/common/stores"; export default definePlugin({ - name: "Always Trust", + name: "AlwaysTrust", description: "Prevents Discord's trust website confirmations", - authors: [Dev.cocobo1], + authors: [ + { + "name": "cocobo1", + "id": 767650984175992833n + }, + ], patches: [ { diff --git a/src/plugins/dashless/index.ts b/src/plugins/dashless/index.ts deleted file mode 100644 index b2c0687..0000000 --- a/src/plugins/dashless/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ReactNative } from "src/metro/common/libraries/index.ts"; -import { after } from "src/patcher/index.ts"; -import { definePlugin } from "#plugin-context"; -import { Dev } from "@data/constants"; - -const { View } = ReactNative; - -const traverseAndModify = (node: any): any => { - if (typeof node === "string") { - return node.replace(/-/g, " "); - } - if (Array.isArray(node)) { - return node.map(traverseAndModify); - } - if (node && typeof node === "object" && node.props && node.props.children) { - return { - ...node, - props: { - ...node.props, - children: traverseAndModify(node.props.children), - }, - }; - } - return node; -}; - -let unpatchRender: () => void; - -export default definePlugin({ - name: "Dashless", - description: "Changes dashes in text channel names to spaces", - authors: [Dev.cocobo1, - { - "name": "Awesomegamergame", - "id": 504401951623086081n - }], - start() { - unpatchRender = after(View, "render", (_, res) => { - return traverseAndModify(res); - }); - }, - - cleanup() { - unpatchRender?.(); - } -}); - -