···127127 url={`/guilds/${guild?.id}/modules/bye`}
128128 ratio="aspect-4/1"
129129 dataName="card.background"
130130- description="Enter a url which should be the background for the image card. The recommended image ratio is 4:1 and recommended resolution 1024x256px."
130130+ description="Enter a url which should be the background for the image card. The recommended resolution is 906x256px."
131131 defaultState={data.card.background || ""}
132132 disabled={!enabled || (guild!.flags & GuildFlags.FarewellCard) === 0}
133133 onSave={(s) => {
+1-1
app/dashboard/[guildId]/greeting/welcome/page.tsx
···220220 url={`/guilds/${guild?.id}/modules/welcome`}
221221 ratio="aspect-4/1"
222222 dataName="card.background"
223223- description="Enter a url which should be the background for the image card. The recommended image ratio is 4:1 and recommended resolution 1024x256px."
223223+ description="Enter a url which should be the background for the image card. The recommended resolution is 906x256px."
224224 defaultState={data.card.background || ""}
225225 disabled={!enabled || (guild!.flags & GuildFlags.WelcomeCard) === 0}
226226 onSave={(s) => {
+1-1
app/dashboard/[guildId]/leaderboards/page.tsx
···5656 url={url}
5757 ratio="aspect-4/1"
5858 dataName="banner"
5959- description="Enter a url which should be the banner of the leaderboard web page. The recomended image ration is 4:1 and recommended resolution 1024x256px."
5959+ description="Enter a url which should be the banner of the leaderboard web page. The recommended resolution is 906x256px."
6060 defaultState={data.bannerUrl || ""}
6161 />
6262 </div>
+40-18
app/dashboard/[guildId]/notifications/page.tsx
···1515import { AvatarBadge } from "@/components/ui/avatar";
1616import { Button } from "@/components/ui/button";
1717import { cacheOptions } from "@/lib/api";
1818-import { type ApiV1GuildsModulesNotificationsGetResponse, BlueskyNotificationFlags, GuildFlags, NotificationType, TwitchNotificationFlags, YoutubeNotificationFlags } from "@/typings";
1818+import { type ApiV1GuildsModulesNotificationsGetResponse, BlueskyNotificationFlags, GuildFlags, NotificationFlags, NotificationType, YoutubeNotificationFlags } from "@/typings";
1919import { BitfieldManager, bitfieldToArray, transformer } from "@/utils/bitfields";
2020import { createSelectableItems } from "@/utils/create-selectable-items";
2121import { getCanonicalUrl } from "@/utils/urls";
···155155 width={24}
156156 height={24}
157157 />
158158- : <div className="size-[24px] flex items-center justify-center bg-wamellow rounded-full select-none font-medium text-sm text-neutral-200">
158158+ : <div className="size-6 flex items-center justify-center bg-wamellow rounded-full select-none font-medium text-sm text-neutral-200">
159159 {item.creator.username.slice(0, 2)}
160160 </div>
161161 }
···225225 />
226226 : <TextInput
227227 className="md:w-1/2 w-full"
228228- name="Ignore regex"
228228+ name={flags.has(NotificationFlags.MustNotMatchRegex)
229229+ ? "Blacklist regex"
230230+ : "Whitelist regex"
231231+ }
229232 url={url + "/" + item.id}
230233 dataName="regex"
231231- description="Posts that match the provided regex will be ignored."
234234+ description={flags.has(NotificationFlags.MustNotMatchRegex)
235235+ ? "Posts that match the provided regex will be ignored."
236236+ : "Only posts that match the provided regex will be sent."
237237+ }
232238 defaultState={item.regex || ""}
233239 onSave={(value) => editItem("regex", value as string)}
234240 />
235241 }
236242 </div>
237243238238- {item.type === NotificationType.Twitch && (
239239- <Switch
240240- className="mt-2"
241241- label="Delete after stream ends"
242242- endpoint={url + "/" + item.id}
243243- k="flags"
244244- defaultState={(item.flags & TwitchNotificationFlags.DeleteAfterStream) !== 0}
245245- transform={(value) => value ? [TwitchNotificationFlags.DeleteAfterStream] : []} // very fucked up
246246- onSave={(value) => editItem("flags", transformer(value, item.flags, TwitchNotificationFlags.DeleteAfterStream))}
247247- />
248248- )}
249249-250244 {platformFlags && (
251245 <TextInput
252246 className="md:w-1/2 w-full"
253253- name="Ignore regex"
247247+ name={flags.has(NotificationFlags.MustNotMatchRegex)
248248+ ? "Blacklist regex"
249249+ : "Whitelist regex"
250250+ }
254251 url={url + "/" + item.id}
255252 dataName="regex"
256256- description="Posts that match the provided regex will be ignored."
253253+ description={flags.has(NotificationFlags.MustNotMatchRegex)
254254+ ? "Posts that match the provided regex will be ignored."
255255+ : "Only posts that match the provided regex will be sent."
256256+ }
257257 defaultState={item.regex || ""}
258258 onSave={(value) => editItem("regex", value as string)}
259259+ />
260260+ )}
261261+262262+ <Switch
263263+ className="mt-2"
264264+ label="Inverted regex (blacklist)"
265265+ endpoint={url + "/" + item.id}
266266+ k="flags"
267267+ defaultState={(item.flags & NotificationFlags.MustNotMatchRegex) !== 0}
268268+ transform={(value) => value ? [NotificationFlags.MustNotMatchRegex] : []} // very fucked up
269269+ onSave={(value) => editItem("flags", transformer(value, item.flags, NotificationFlags.MustNotMatchRegex))}
270270+ />
271271+272272+ {item.type === NotificationType.Twitch && (
273273+ <Switch
274274+ className="mt-2"
275275+ label="Delete after stream ends"
276276+ endpoint={url + "/" + item.id}
277277+ k="flags"
278278+ defaultState={(item.flags & NotificationFlags.DeleteAfterStream) !== 0}
279279+ transform={(value) => value ? [NotificationFlags.DeleteAfterStream] : []} // very fucked up
280280+ onSave={(value) => editItem("flags", transformer(value, item.flags, NotificationFlags.DeleteAfterStream))}
259281 />
260282 )}
261283
+1-1
app/profile/rank/page.tsx
···8484 url="/users/@me/rank"
8585 ratio="aspect-4/1"
8686 dataName="background"
8787- description="Enter a url which should be the background of your /rank card. The recomended image ration is 4:1 and recommended resolution 1024x256px."
8787+ description="Enter a url which should be the background of your /rank card. The recommended resolution is 906x256px."
8888 defaultState={user?.extended?.rank?.background || ""}
8989 onSave={(value) => {
9090 userStore.setState(deepMerge<User>(user, { extended: { rank: { background: value } } }));
+1-10
public/docs/farewell.md
···1919<mark>
2020 Please provide a direct link to the image, not a link to a website containing the image.
2121</mark>
2222-<br />
23222423You can create a nice farewell image by **customizing the background for free**.
25242625
27262828-Custom background image must be `1024x256px` (width, height) and type of `.png`.<br />
2727+Custom background image must be `906x256px` (width, height) and type of `.png`, `.jpg`, `.jpeg`, or `.webp`.<br />
2928Please note that `cdn.discordapp.com` no longer works due to [attachment authentication](https://discord.com/channels/613425648685547541/697138785317814292/1157372186160537750), you can upload images to [postimg.cc](https://postimg.cc/) and copy the direct image url.
3030-<br />
3131-<br />
3232-3333-**Example custom backgrounds:**
3434-- [images.wamellow.com/static/grass.jpg](https://images.wamellow.com/static/grass.jpg)
3535-- [images.wamellow.com/static/orange-grass.jpg](https://images.wamellow.com/static/grass.jpg)
3636-- [images.wamellow.com/static/red-grass.jpg](https://images.wamellow.com/static/red-grass.jpg)
3737-- [images.wamellow.com/static/rank.png](https://images.wamellow.com/static/rank.png)
+1-8
public/docs/greetings.md
···1919<mark>
2020 Please provide a direct link to the image, not a link to a website containing the image.
2121</mark>
2222-<br />
23222423You can create a nice welcome image by **customizing the background for free**.
25242625
27262828-Custom background image must be `1024x256px` (width, height) and type of `.png`.<br />
2727+Custom background image must be `906x256px` (width, height) and type of `.png`, `.jpg`, `.jpeg`, or `.webp`.<br />
2928Please note that `cdn.discordapp.com` no longer works due to [attachment authentication](https://discord.com/channels/613425648685547541/697138785317814292/1157372186160537750), you can upload images to [postimg.cc](https://postimg.cc/) and copy the direct image url.
3029<br />
3130<br />
3232-3333-**Example custom backgrounds:**
3434-- [images.wamellow.com/static/grass.jpg](https://images.wamellow.com/static/grass.jpg)
3535-- [images.wamellow.com/static/orange-grass.jpg](https://images.wamellow.com/static/grass.jpg)
3636-- [images.wamellow.com/static/red-grass.jpg](https://images.wamellow.com/static/red-grass.jpg)
3737-- [images.wamellow.com/static/rank.png](https://images.wamellow.com/static/rank.png)
38313932### 🧨 Auto delete
4033Automatically delete the welcome message after a certain amount of time. Set to 0 seconds to not delete.