From ccd6f6ce381dc65f71129828fa14e9ee9369f7b7 Mon Sep 17 00:00:00 2001 From: neoarz Date: Wed, 17 Sep 2025 06:42:45 -0400 Subject: [PATCH 1/6] feat: add new sidestore commands --- cogs/sidestore/code.py | 63 ++++++++++++++++++++++ cogs/sidestore/sidestore.py | 105 ++++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 cogs/sidestore/code.py create mode 100644 cogs/sidestore/sidestore.py diff --git a/cogs/sidestore/code.py b/cogs/sidestore/code.py new file mode 100644 index 0000000..a4c41b5 --- /dev/null +++ b/cogs/sidestore/code.py @@ -0,0 +1,63 @@ +import discord +from discord import app_commands +from discord.ext import commands +from discord.ext.commands import Context +import time + + +class Code(commands.Cog, name="code"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="code", description="No code received when signing in with Apple ID" + ) + async def code(self, context: Context) -> None: + embed = discord.Embed( + color=0x8e82f9, + description=( + '## Verification Code Not Received When Signing In with Apple ID\n\n---\n\n' + + + '1. **For iOS versions below 18.1:**\n' + + ' - Open the "Settings" app\n' + + ' - Tap on your name at the top of the screen\n' + + ' - Navigate to "Sign-In and Security"\n' + + ' - Select "Two-Factor Authentication"\n' + + ' - Choose "Get Verification Code"\n\n' + + '2. **For iOS versions 18.1 and above:**\n' + + ' - Visit [iCloud](https://www.icloud.com) on a web browser\n' + + ' - Click "Sign In"\n' + + ' - When prompted, you will see two options: "Sign In" and "Use Different Apple Account"\n' + + ' - Select the bottom option, "Use Different Apple Account"\n' + + ' - Enter your Apple ID and password\n' + + ' - Apple will send you a verification code\n' + + ' - Use this code in Sidestore to complete the sign-in process\n' + ) + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + embed.set_footer(text=f'Last Edited by neoarz | Last updated at {int(time.time())}') + embed.timestamp = discord.utils.utcnow() + + view = discord.ui.View() + view.add_item(discord.ui.Button( + label="Edit Command", + style=discord.ButtonStyle.secondary, + url="https://github.com/neoarz/syntrel", + emoji="<:githubicon:1417717356846776340>" + )) + view.add_item(discord.ui.Button( + label="Documentation", + style=discord.ButtonStyle.primary, + url="https://docs.sidestore.io/docs/troubleshooting/#sign-in-issues", + emoji="<:sidestorepride:1417717648795631787>" + )) + + + if context.interaction: + await context.interaction.response.send_message(embed=embed, view=view) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Code(bot)) diff --git a/cogs/sidestore/sidestore.py b/cogs/sidestore/sidestore.py new file mode 100644 index 0000000..b09f44d --- /dev/null +++ b/cogs/sidestore/sidestore.py @@ -0,0 +1,105 @@ +import discord +from discord import app_commands +from discord.ext import commands +from discord.ext.commands import Context +import time + + +class SidestoreSelect(discord.ui.Select): + def __init__(self, bot): + self.bot = bot + options = [ + discord.SelectOption( + label="Refresh Issues", + value="refresh", + description="Help with refreshing or installing apps", + ), + discord.SelectOption( + label="Verification Code", + value="code", + description="No code received when signing in with Apple ID", + ), + discord.SelectOption( + label="App Crashes", + value="crash", + description="Help with SideStore crashing issues", + ), + discord.SelectOption( + label="Pairing File", + value="pairing", + description="Help with pairing file issues", + ), + discord.SelectOption( + label="Anisette Server", + value="server", + description="Help with anisette server issues", + ), + discord.SelectOption( + label="Apps Stuck Halfway", + value="half", + description="Help when apps get stuck installing", + ), + discord.SelectOption( + label="SparseRestore", + value="sparse", + description="Information about SparseRestore exploit", + ) + ] + super().__init__(placeholder="Choose a SideStore command...", options=options) + + async def callback(self, interaction: discord.Interaction): + command_name = self.values[0] + command = self.bot.get_command(command_name) + + if command: + ctx = await self.bot.get_context(interaction.message) + if ctx: + await ctx.invoke(command) + embed = discord.Embed( + title="Command Executed", + description=f"Successfully executed `/{command_name}`", + color=0x00FF00 + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + await interaction.response.edit_message(embed=embed, view=None) + else: + embed = discord.Embed( + title="Error", + description="Command not found!", + color=0xFF0000 + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + await interaction.response.edit_message(embed=embed, view=None) + + +class SidestoreView(discord.ui.View): + def __init__(self, bot): + super().__init__() + self.add_item(SidestoreSelect(bot)) + + +class Sidestore(commands.Cog, name="sidestore"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="sidestore", description="SideStore troubleshooting and help" + ) + async def sidestore(self, context: Context) -> None: + embed = discord.Embed( + title="SideStore Commands", + description="Choose a command from the dropdown below to get help with specific issues:", + color=0x8e82f9 + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + + view = SidestoreView(self.bot) + + if context.interaction: + await context.interaction.response.send_message(embed=embed, view=view, ephemeral=True) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Sidestore(bot)) From ee30b89c1f08075cd3d8ac6ec6eb5acf8b5d5265 Mon Sep 17 00:00:00 2001 From: neoarz Date: Wed, 17 Sep 2025 07:00:52 -0400 Subject: [PATCH 2/6] feat: add anisette server command --- cogs/sidestore/server.py | 55 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 cogs/sidestore/server.py diff --git a/cogs/sidestore/server.py b/cogs/sidestore/server.py new file mode 100644 index 0000000..0a27983 --- /dev/null +++ b/cogs/sidestore/server.py @@ -0,0 +1,55 @@ +import discord +from discord import app_commands +from discord.ext import commands +from discord.ext.commands import Context +import time + + +class Server(commands.Cog, name="server"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="server", description="Help with anisette server issues" + ) + async def server(self, context: Context) -> None: + embed = discord.Embed( + color=0x8e82f9, + description=( + '# Sidestore Freezing or Displaying an Error Code During Sign-In\n\n---\n\n' + + '1. **Change the Anisette Server:**\n' + + ' The most common solution is to switch to a different Anisette server. Do this:\n' + + ' - Open Sidestore settings\n' + + ' - Scroll down to the "Anisette Server" option\n' + + ' - Select a different server from the list\n' + + ' - You might need to try a few servers from the list and find which works best for you\n\n' + + '2. **Host Your Own Anisette Server:**\n' + + ' If you prefer, you can set up your own Anisette server. Detailed instructions for hosting an Anisette server are available in the official documentation and can be found [here](https://docs.sidestore.io/docs/advanced/anisette).\n\n' + ) + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + embed.set_footer(text=f'Last Edited by neoarz | Last updated at {int(time.time())}') + embed.timestamp = discord.utils.utcnow() + + view = discord.ui.View() + view.add_item(discord.ui.Button( + label="Edit Command", + style=discord.ButtonStyle.secondary, + url="https://github.com/neoarz/syntrel", + emoji="<:githubicon:1417717356846776340>" + )) + view.add_item(discord.ui.Button( + label="Documentation", + style=discord.ButtonStyle.primary, + url="https://docs.sidestore.io/docs/troubleshooting/#sidestore-freezing-or-displaying-an-error-code-during-sign-in", + emoji="<:sidestorepride:1417717648795631787>" + )) + + if context.interaction: + await context.interaction.response.send_message(embed=embed, view=view) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Server(bot)) From 4d7b23dae26b6541d0c76e07b205410ff3757498 Mon Sep 17 00:00:00 2001 From: neoarz Date: Wed, 17 Sep 2025 07:44:21 -0400 Subject: [PATCH 3/6] feat: add sparse command --- cogs/sidestore/sparse.py | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 cogs/sidestore/sparse.py diff --git a/cogs/sidestore/sparse.py b/cogs/sidestore/sparse.py new file mode 100644 index 0000000..2c5e1bf --- /dev/null +++ b/cogs/sidestore/sparse.py @@ -0,0 +1,50 @@ +import discord +from discord import app_commands +from discord.ext import commands +from discord.ext.commands import Context +import time + + +class Sparse(commands.Cog, name="sparse"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="sparse", description="Information about SparseRestore exploit" + ) + async def sparse(self, context: Context) -> None: + embed = discord.Embed( + color=0x8e82f9, + description=( + '# SparseRestore "Bypass 3 App Limit" Exploit\n\n---\n\n' + + 'The SparseRestore exploit allows you to bypass the 3-app sideloading limit. It is compatible with iOS/iPadOS versions **15.2 to 18.1 beta 4**, (not including **17.7.1** and **17.7.2**).\n\n' + + 'iOS/iPadOS versions **17.0** (not including **16.7** and **16.7.10**) are recommended to use [Trollstore](https://ios.cfw.guide/installing-trollstore/)\n\n' + + 'If you\'re on a supported version and want to sideload more than three apps, follow the detailed instructions found in our documentation' + ) + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + embed.set_footer(text=f'Last Edited by neoarz | Last updated at {int(time.time())}') + embed.timestamp = discord.utils.utcnow() + + view = discord.ui.View() + view.add_item(discord.ui.Button( + label="Edit Command", + style=discord.ButtonStyle.secondary, + url="https://github.com/neoarz/syntrel", + emoji="<:githubicon:1417717356846776340>" + )) + view.add_item(discord.ui.Button( + label="Documentation", + style=discord.ButtonStyle.primary, + url="https://docs.sidestore.io/docs/advanced/sparserestore", + emoji="<:sidestorepride:1417717648795631787>" + )) + + if context.interaction: + await context.interaction.response.send_message(embed=embed, view=view) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Sparse(bot)) From a9edf7a423989396763ebe4c3b55b85113b654a3 Mon Sep 17 00:00:00 2001 From: neoarz Date: Wed, 17 Sep 2025 08:09:19 -0400 Subject: [PATCH 4/6] feat: pairing command and update SideStore help Introduces a new 'pairing' command for troubleshooting pairing file issues in SideStore. Updates help.py to include the 'sidestore' category and related commands, and refines embed footers in code.py, server.py, and sparse.py for consistency. --- cogs/general/help.py | 14 +++++++-- cogs/sidestore/code.py | 2 +- cogs/sidestore/pairing.py | 61 +++++++++++++++++++++++++++++++++++++++ cogs/sidestore/sparse.py | 2 +- 4 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 cogs/sidestore/pairing.py diff --git a/cogs/general/help.py b/cogs/general/help.py index 3f07dc5..8a0788a 100644 --- a/cogs/general/help.py +++ b/cogs/general/help.py @@ -13,7 +13,7 @@ class Help(commands.Cog, name="help"): interaction: discord.Interaction, current: str, ) -> list[app_commands.Choice[str]]: - categories = ["general", "fun", "moderation", "template", "owner"] + categories = ["general", "fun", "moderation", "template", "owner", "sidestore"] suggestions = [] for category in categories: @@ -56,6 +56,15 @@ class Help(commands.Cog, name="help"): "warnings": "moderation", "archive": "moderation", + "sidestore": "sidestore", + "refresh": "sidestore", + "code": "sidestore", + "crash": "sidestore", + "pairing": "sidestore", + "server": "sidestore", + "half": "sidestore", + "sparse": "sidestore", + "sync": "owner", "cog_management": "owner", "shutdown": "owner", @@ -68,7 +77,8 @@ class Help(commands.Cog, name="help"): "fun": "Funny commands", "moderation": "Administration commands", "template": "Template commands", - "owner": "Owner commands" + "owner": "Owner commands", + "sidestore": "SideStore troubleshooting commands" } if category is None: diff --git a/cogs/sidestore/code.py b/cogs/sidestore/code.py index a4c41b5..c8c84c6 100644 --- a/cogs/sidestore/code.py +++ b/cogs/sidestore/code.py @@ -35,7 +35,7 @@ class Code(commands.Cog, name="code"): ) ) embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") - embed.set_footer(text=f'Last Edited by neoarz | Last updated at {int(time.time())}') + embed.set_footer(text=f'Last Edited by neoarz') embed.timestamp = discord.utils.utcnow() view = discord.ui.View() diff --git a/cogs/sidestore/pairing.py b/cogs/sidestore/pairing.py new file mode 100644 index 0000000..f7c7f17 --- /dev/null +++ b/cogs/sidestore/pairing.py @@ -0,0 +1,61 @@ +import discord +from discord import app_commands +from discord.ext import commands +from discord.ext.commands import Context +import time + + +class Pairing(commands.Cog, name="pairing"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="pairing", description="Help with pairing file issues" + ) + async def pairing(self, context: Context) -> None: + embed = discord.Embed( + color=0x8e82f9, + description=( + '# Cannot Choose Pairing File\n\n---\n\n' + + '1. **Check File Extension:**\n' + + " Make sure your pairing file's extension ends with `.mobiledevicepairing` or `.plist`\n" + + ' - If it doesn\'t, double-check to see if you had zipped your pairing file before sending it to your phone. Failing to do so may lead to the file being corrupted during transport\n\n' + + '2. **Move Pairing File:**\n' + + ' If you are unable to select the pairing file from within the app:\n' + + ' - Rename the file to `ALTPairingFile.mobiledevicepairing`\n' + + ' - Try moving the pairing file to the root directory of the SideStore folder in the Files app under "On My iPhone/iPad"\n\n' + + '3. **Certificate Signing:**\n' + + " When signing Sidestore with certain certificates, you won't be able to select the pairing file from within the app\n" + + ' - Try the fix mentioned above\n' + + ' - If you do not see the Sidestore folder in the Files app:\n' + + ' • Connect your phone to your computer\n' + + ' • Drag and drop the pairing file into the Sidestore app\'s files section\n' + + ' • Ensure the file is renamed to `ALTPairingFile.mobiledevicepairing`\n' + ) + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + embed.set_footer(text=f'Last Edited by neoarz') + embed.timestamp = discord.utils.utcnow() + + view = discord.ui.View() + view.add_item(discord.ui.Button( + label="Edit Command", + style=discord.ButtonStyle.secondary, + url="https://github.com/neoarz/syntrel", + emoji="<:githubicon:1417717356846776340>" + )) + view.add_item(discord.ui.Button( + label="Documentation", + style=discord.ButtonStyle.primary, + url="https://docs.sidestore.io/docs/troubleshooting/#cannot-choose-pairing-file", + emoji="<:sidestorepride:1417717648795631787>" + )) + + if context.interaction: + await context.interaction.response.send_message(embed=embed, view=view) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Pairing(bot)) diff --git a/cogs/sidestore/sparse.py b/cogs/sidestore/sparse.py index 2c5e1bf..760984a 100644 --- a/cogs/sidestore/sparse.py +++ b/cogs/sidestore/sparse.py @@ -23,7 +23,7 @@ class Sparse(commands.Cog, name="sparse"): ) ) embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") - embed.set_footer(text=f'Last Edited by neoarz | Last updated at {int(time.time())}') + embed.set_footer(text=f'Last Edited by neoarz') embed.timestamp = discord.utils.utcnow() view = discord.ui.View() From 54c0da4d292bec1b2824694fc6035a32587d53c0 Mon Sep 17 00:00:00 2001 From: neoarz Date: Wed, 17 Sep 2025 08:30:05 -0400 Subject: [PATCH 5/6] feat: refresh command and update GitHub links Introduces a new 'refresh' command for troubleshooting app refresh/install issues. Updates 'Edit Command' button URLs in code, pairing, server, and sparse cogs to point directly to their respective source files on GitHub. Removes timestamp from server cog footer. --- cogs/idevice/idevice.py | 3 +++ cogs/sidestore/code.py | 2 +- cogs/sidestore/pairing.py | 2 +- cogs/sidestore/refresh.py | 53 +++++++++++++++++++++++++++++++++++++++ cogs/sidestore/server.py | 4 +-- cogs/sidestore/sparse.py | 2 +- 6 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 cogs/idevice/idevice.py create mode 100644 cogs/sidestore/refresh.py diff --git a/cogs/idevice/idevice.py b/cogs/idevice/idevice.py new file mode 100644 index 0000000..5360f64 --- /dev/null +++ b/cogs/idevice/idevice.py @@ -0,0 +1,3 @@ +async def setup(bot) -> None: + pass + diff --git a/cogs/sidestore/code.py b/cogs/sidestore/code.py index c8c84c6..4690f20 100644 --- a/cogs/sidestore/code.py +++ b/cogs/sidestore/code.py @@ -42,7 +42,7 @@ class Code(commands.Cog, name="code"): view.add_item(discord.ui.Button( label="Edit Command", style=discord.ButtonStyle.secondary, - url="https://github.com/neoarz/syntrel", + url="https://github.com/neoarz/syntrel/blob/main/cogs/sidestore/code.py", emoji="<:githubicon:1417717356846776340>" )) view.add_item(discord.ui.Button( diff --git a/cogs/sidestore/pairing.py b/cogs/sidestore/pairing.py index f7c7f17..4015004 100644 --- a/cogs/sidestore/pairing.py +++ b/cogs/sidestore/pairing.py @@ -41,7 +41,7 @@ class Pairing(commands.Cog, name="pairing"): view.add_item(discord.ui.Button( label="Edit Command", style=discord.ButtonStyle.secondary, - url="https://github.com/neoarz/syntrel", + url="https://github.com/neoarz/syntrel/blob/main/cogs/sidestore/pairing.py", emoji="<:githubicon:1417717356846776340>" )) view.add_item(discord.ui.Button( diff --git a/cogs/sidestore/refresh.py b/cogs/sidestore/refresh.py new file mode 100644 index 0000000..ae055a2 --- /dev/null +++ b/cogs/sidestore/refresh.py @@ -0,0 +1,53 @@ +import discord +from discord import app_commands +from discord.ext import commands +from discord.ext.commands import Context +import time + + +class Refresh(commands.Cog, name="refresh"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="refresh", description="Help with refreshing or installing apps" + ) + async def refresh(self, context: Context) -> None: + embed = discord.Embed( + color=0x8e82f9, + description=( + '# Can\'t Refresh or Install Apps\n\n---\n\n' + + '1. **Make sure your device is connected to a stable Wi-Fi network and not using cellular data.**\n' + + '2. **Verify VPN is connected in the StosVPN app.**\n' + + '3. **Turn off, then turn back on StosVPN, and wait a few seconds in Sidestore before trying to refresh.**\n' + + '4. **Create a brand new pairing file.**\n' + + ' - If none of the above worked, it is very likely that the pairing file is corrupted. You can reference the documentation on how to create a new pairing file [here](https://docs.sidestore.io/docs/troubleshooting/#cant-refresh-or-install-apps).\n' + + ' - After creating a new pairing file, go to Sidestore settings and press "Reset pairing file," then choose the new pairing file you just created.\n' + ) + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + embed.set_footer(text=f'Last Edited by neoarz') + embed.timestamp = discord.utils.utcnow() + + view = discord.ui.View() + view.add_item(discord.ui.Button( + label="Edit Command", + style=discord.ButtonStyle.secondary, + url="https://github.com/neoarz/syntrel/blob/main/cogs/sidestore/refresh.py", + emoji="<:githubicon:1417717356846776340>" + )) + view.add_item(discord.ui.Button( + label="Documentation", + style=discord.ButtonStyle.primary, + url="https://docs.sidestore.io/docs/troubleshooting/#cant-refresh-or-install-apps", + emoji="<:sidestorepride:1417717648795631787>" + )) + + if context.interaction: + await context.interaction.response.send_message(embed=embed, view=view) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Refresh(bot)) diff --git a/cogs/sidestore/server.py b/cogs/sidestore/server.py index 0a27983..13a647f 100644 --- a/cogs/sidestore/server.py +++ b/cogs/sidestore/server.py @@ -28,14 +28,14 @@ class Server(commands.Cog, name="server"): ) ) embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") - embed.set_footer(text=f'Last Edited by neoarz | Last updated at {int(time.time())}') + embed.set_footer(text=f'Last Edited by neoarz') embed.timestamp = discord.utils.utcnow() view = discord.ui.View() view.add_item(discord.ui.Button( label="Edit Command", style=discord.ButtonStyle.secondary, - url="https://github.com/neoarz/syntrel", + url="https://github.com/neoarz/syntrel/blob/main/cogs/sidestore/server.py", emoji="<:githubicon:1417717356846776340>" )) view.add_item(discord.ui.Button( diff --git a/cogs/sidestore/sparse.py b/cogs/sidestore/sparse.py index 760984a..e23c837 100644 --- a/cogs/sidestore/sparse.py +++ b/cogs/sidestore/sparse.py @@ -30,7 +30,7 @@ class Sparse(commands.Cog, name="sparse"): view.add_item(discord.ui.Button( label="Edit Command", style=discord.ButtonStyle.secondary, - url="https://github.com/neoarz/syntrel", + url="https://github.com/neoarz/syntrel/blob/main/cogs/sidestore/sparse.py", emoji="<:githubicon:1417717356846776340>" )) view.add_item(discord.ui.Button( From 2898b14555662b45624b03cf9361e79fc8013526 Mon Sep 17 00:00:00 2001 From: neoarz Date: Wed, 17 Sep 2025 08:41:24 -0400 Subject: [PATCH 6/6] feat: old sidestore commands are done!!!! --- cogs/sidestore/crash.py | 47 +++++++++++++++++++++++++++++ cogs/sidestore/half.py | 62 +++++++++++++++++++++++++++++++++++++++ cogs/sidestore/refresh.py | 6 ++-- 3 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 cogs/sidestore/crash.py create mode 100644 cogs/sidestore/half.py diff --git a/cogs/sidestore/crash.py b/cogs/sidestore/crash.py new file mode 100644 index 0000000..2bfd06f --- /dev/null +++ b/cogs/sidestore/crash.py @@ -0,0 +1,47 @@ +import discord +from discord import app_commands +from discord.ext import commands +from discord.ext.commands import Context +import time + + +class Crash(commands.Cog, name="crash"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="crash", description="Help with SideStore crashing issues" + ) + async def crash(self, context: Context) -> None: + embed = discord.Embed( + color=0x8e82f9, + description=( + '# Sidestore Crashing After Refresh\n\n---\n\n' + + '1. Delete your current SideStore.\n' + + '2. Reinstall with AltServer.\n' + + '3. Select the pairing file and sign into SideStore.\n' + + '4. Download the SideStore .ipa file, and save it to your Files app.\n' + + '5. Import the "Sidestore.ipa" file into SideStore, just like how you import any other IPA.\n\n' + + 'This process ensures SideStore is refreshed without issues.' + ) + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + embed.set_footer(text=f'Last Edited by neoarz') + embed.timestamp = discord.utils.utcnow() + + view = discord.ui.View() + view.add_item(discord.ui.Button( + label="Edit Command", + style=discord.ButtonStyle.secondary, + url="https://github.com/neoarz/neos-helper-bot/blob/main/cogs/sidestore/crash.py", + emoji="<:githubicon:1417717356846776340>" + )) + + if context.interaction: + await context.interaction.response.send_message(embed=embed, view=view) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Crash(bot)) diff --git a/cogs/sidestore/half.py b/cogs/sidestore/half.py new file mode 100644 index 0000000..afab7e6 --- /dev/null +++ b/cogs/sidestore/half.py @@ -0,0 +1,62 @@ +import discord +from discord import app_commands +from discord.ext import commands +from discord.ext.commands import Context +import time + + +class Half(commands.Cog, name="half"): + def __init__(self, bot) -> None: + self.bot = bot + + @commands.hybrid_command( + name="half", description="Help when apps get stuck installing" + ) + async def half(self, context: Context) -> None: + embed = discord.Embed( + color=0x8e82f9, + description=( + '# Sidestore/IPAs Stuck Halfway Through Installing or Refreshing\n\n---\n' + + '### Method 1: Basic Troubleshooting\n\n' + + '- Restart SideStore\n' + + '- Restart device\n' + + '- Clear Cache\n' + + '- Change Anisette Server\n' + + '- Reset adi.pb\n' + + '- Sign out from SideStore and sign back in\n' + + '- Regenerate pairing file\n' + + '- Reinstall SideStore\n\n' + + '### Method 2: If Method 1 Doesn\'t Work\n\n' + + '1. Delete Sidestore\n' + + '2. Reinstall SideStore using the guide at https://docs.sidestore.io/\n' + + '3. **Do not use the IPA provided by the website**, instead use this older version: [Sidestore 0.5.9 download](https://github.com/SideStore/SideStore/releases/download/0.5.9/SideStore.ipa)\n' + + '4. Setup SideStore and StosVPN as usual\n' + + '> -# Step 3 is the important one (make sure to do that)\n' + ) + ) + embed.set_author(name="SideStore", icon_url="https://github.com/SideStore/assets/blob/main/icons/classic/Default.png?raw=true") + embed.set_footer(text=f'Last Edited by neoarz') + embed.timestamp = discord.utils.utcnow() + + view = discord.ui.View() + view.add_item(discord.ui.Button( + label="Edit Command", + style=discord.ButtonStyle.secondary, + url="https://github.com/neoarz/neos-helper-bot/blob/main/cogs/sidestore/half.py", + emoji="<:githubicon:1417717356846776340>" + )) + view.add_item(discord.ui.Button( + label="Documentation", + style=discord.ButtonStyle.primary, + url="https://docs.sidestore.io/docs/troubleshooting/common-issues#sidestore-hangs-halfway-through-installation", + emoji="<:sidestorepride:1417717648795631787>" + )) + + if context.interaction: + await context.interaction.response.send_message(embed=embed, view=view) + else: + await context.send(embed=embed, view=view) + + +async def setup(bot) -> None: + await bot.add_cog(Half(bot)) diff --git a/cogs/sidestore/refresh.py b/cogs/sidestore/refresh.py index ae055a2..d33f390 100644 --- a/cogs/sidestore/refresh.py +++ b/cogs/sidestore/refresh.py @@ -17,9 +17,9 @@ class Refresh(commands.Cog, name="refresh"): color=0x8e82f9, description=( '# Can\'t Refresh or Install Apps\n\n---\n\n' + - '1. **Make sure your device is connected to a stable Wi-Fi network and not using cellular data.**\n' + - '2. **Verify VPN is connected in the StosVPN app.**\n' + - '3. **Turn off, then turn back on StosVPN, and wait a few seconds in Sidestore before trying to refresh.**\n' + + '1. Make sure your device is connected to a stable Wi-Fi network and not using cellular data.\n' + + '2. Verify VPN is connected in the StosVPN app.\n' + + '3. Turn off, then turn back on StosVPN, and wait a few seconds in Sidestore before trying to refresh.\n' + '4. **Create a brand new pairing file.**\n' + ' - If none of the above worked, it is very likely that the pairing file is corrupted. You can reference the documentation on how to create a new pairing file [here](https://docs.sidestore.io/docs/troubleshooting/#cant-refresh-or-install-apps).\n' + ' - After creating a new pairing file, go to Sidestore settings and press "Reset pairing file," then choose the new pairing file you just created.\n'