#development

1 messages · Page 160 of 1

earnest phoenix
#

There's something better than Cargo, it's called nully

radiant kraken
earnest phoenix
wheat mesa
#

binbows makes it annoying to use clang :c

quartz kindle
#

cargo makes cars go

sage bobcat
#

One message removed from a suspended account.

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

wheat mesa
#

Eh

#

I’ve got MSVC working with CMake now so I’m not gonna bother

#

Kind of a dumb question, but how can I get VSC to recognize errors without finding out via compiling?

#

For example, I have this code, which very obviously doesn't work because head cannot be set to nullptr since it's not a pointer type, but VSC doesn't recognize it and thinks everything is fine

quartz kindle
#

TS or cpp?

sage bobcat
#

One message removed from a suspended account.

quartz kindle
#

there are extensions for that

sage bobcat
#

One message removed from a suspended account.

wheat mesa
# quartz kindle ie

I have the extensions, but it still fails to detect some basic errors like that

quartz kindle
wheat mesa
#

doesn't change anything

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

lyric mountain
#

so you need a C++ grademmLol

quartz kindle
#

hey i got a C in C and a C++ in C++

#

:^)

radiant kraken
#

VSCode's C/C++ intellisense probably only works on syntax-level

#

or maybe its just shit mmLol

radiant kraken
#

volt trying not to promote clang challenge (impossible)

earnest phoenix
#

True

radiant kraken
#

well

#

time to promote cargo

earnest phoenix
#

Time to promote that nully is awesome

radiant kraken
#

thanks

earnest phoenix
sharp geyser
#

So a message can have user mentions. role mentions and channel mentions. Should i make these their own fields on the message object or combine it all into one mentions field on the message?

#

I could do something similar to djs where its just a class that handles mentions and splits them into member, user, roles and channel fields on the class itself

sharp geyser
#
    constructor(data: APIMessage, client: Client) {
        this.client = client;
        this.id = data.id;
        this.channelId = data.channel_id;
        this.author = data.author;
        this.content = data.content;
        this.timestamp = data.timestamp;
        this.editedTimestamp = data.edited_timestamp;
        this.tts = data.tts;
        this.mentions = data.mentions;

        this.channel = this.client.requestManager.get(Routes.channel(this.channelId));
    }

so my this.channel will end up becoming Promise { <pending> } because this.client.requestManager.get returns a promise, and since i can't use async/await in a constructor I would end up having to use .then and such right? Well when I do that it ends up becoming undefined

#
this.client.requestManager.get(Routes.channel(this.channelId)).then((result) => {
  console.log(`Result:\n${JSON.stringify(result)}`);
  this.channel = result;
});

Are you not able to do this? Cause result does log as a proper channel object, but when assigning it to this.channel it becomes undefined later

#

there's probably a better way to be doing this

lament rock
#

Does djs no longer use a Proxy for the rest

earnest phoenix
earnest phoenix
neon leaf
#

when asyncConstructor poggythumbsup

#

await new Car()

quartz kindle
#

you can already do that

neon leaf
#

yeah but would be nice in the class syntax sugar

quartz kindle
#

perhaps

#

but that kind of goes against the whole principle of classes

#

Promise being an exception for god knows why

lament rock
#

What user notices the difference between a pre class syntax and post through a lib when they're not expected to edit the src

#

Other than an async constructor

quartz kindle
lament rock
#

cursed

quartz kindle
#

yup

lament rock
#

new can be used on any function tho so

quartz kindle
#

i dont really do this on my code lel

#

i rather have a dedicated method for it

#

like .init() or something

frosty gale
#

i didnt tell it to do that

quartz kindle
#

call the police

frosty gale
#

😠

sharp geyser
#

thanks for that simple solution

#

:p

#

@earnest phoenix channel still seems to become undefined even though my request get returns a channel object

quartz kindle
#

or, you can do this

quartz kindle
#
constructor() {
  ...
  return this.client.requestManager.get(Routes.channel(this.channelId)).then(x => {
    this.channel = x;
    return this;
  });
}

const myClass = await new Class()
#

:^)

scenic kelp
sharp geyser
#

but what voltrex said works I just forgor to await my calling .init

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

quartz kindle
sharp geyser
#

odd

#

it returns undefined for me no matter what

#

also returning a constructor gives me issues

quartz kindle
#

show cod?

sharp geyser
#

Ah

#

its because I have to return a promise

quartz kindle
#

ye

sharp geyser
#

returning ```
this.client.requestManager.get(Routes.channel(this.channelId)).then((x) => {
this.channel = x;
return this;
});

#

is not valid

quartz kindle
#

you cant use async in the constructor, but you can return a promise and use async in it

#

does requestManager.get() not return a promise?

sharp geyser
#

it returns a Promise<any>

#

my bad

#

so yea

quartz kindle
#

why Promise<void>? shouldnt it return Promise<APIChannel>?

sharp geyser
#

I don't have it typed out

#

so its any

#

I am too lazy to give it a return type based on what is being requested from the api

quartz kindle
#

well, it shouldnt interfere with the actual runtime

sharp geyser
#

yea

quartz kindle
#

you can just type the return value as your class

sharp geyser
#
TS2409: Return type of constructor signature must be assignable to the instance type of the class.
TS2740: Type 'Promise ' is missing the following properties from type 'Message': client, id, channelId, channel, and 7 more.
quartz kindle
#

ah well, TS doesnt like that

sharp geyser
quartz kindle
#

because classes are not supposed to be async

sharp geyser
#

average ts for ya

quartz kindle
#

its just a js hack

sharp geyser
#

yea

#

its fine just making an init method

quartz kindle
#

yeah thats the correct way of doing things anyway

sharp geyser
#

I hope someone smarter than me makes a pr fixing all my dumb ass mistakes

#

:p

quartz kindle
#

its the way i do it too

sharp geyser
#

yeppers

#

btw while you're here

frosty gale
lament rock
#

Why does optional chaining a function call exist

#

funcThing?.()

frosty gale
frosty gale
#

i guess it might be useful if some library either returns an empty object or a function you can call

#

so like data?.callback()

#

or something idfk

quartz kindle
#

but kinda cool idk

#

a?.()?.b?.()?.c?.()

earnest phoenix
sharp geyser
#

Where would that ever be needed

#

Why wouldn’t a function exist?

earnest phoenix
#

A good amount of people wanted that in the optional chaining proposal

lament rock
#

I can see the logic behind it but like lmao it looks so weird

quartz kindle
#

its because of JS's dynamic nature, you can never be sure things exist or not

#

since they can be removed on the fly if need be

lament rock
#

TS

quartz kindle
#

the proposal was for JS not for TS lel

lament rock
#

TS is directly affected by JS tho

quartz kindle
#

how does optional chaining affect TS?

#

TS can just ignore it

lament rock
#

TS has to compile to JS

#

What I meant by mentioning TS was that it's stricter and stuff like what the function optional chaining is for would occur less often

quartz kindle
#

yeah, which means TS will likely never need to compile into optional chaining

#

but JS still needs it

#

regardless of TS's existance

lament rock
#

TS still added optional chaining before JS

earnest phoenix
# sharp geyser Why wouldn’t a function exist?

Compatibility reasons, a library could be trying to be compatible with all versions of a dependency they're using, and so they could be checking for a method that had a name/argument changes between versions

quartz kindle
lament rock
#

My thoughts exactly

#

Situations where you could argue for it would occur much less if at all

quartz kindle
#

yeah but still, JS is a thing that exists without TS

#

so all JS decisions dont need to take TS's existence into considerations at all

lament rock
#

Though something could be said about developers being unsafe

quartz kindle
#

developers being unsafe?

#

how so?

earnest phoenix
#

Yeah that's the weird thing about TS, they go ahead and try to implement a proposal even before JS has gotten it, even though they have absolutely no idea if the proposal will move up to the final stage (stage 4)

lament rock
#

type wise

#

Some proposals are easy to compile down to js tho so it can make sense

radiant kraken
quartz kindle
earnest phoenix
#

All the TS compiler does is to rewrite the TS code that uses such proposals to ways that can be implemented in JS without the need for the engine to implement it

quartz kindle
earnest phoenix
#

For example, TS can't implement realms because it needs engine-specifics which it can't interfere with

radiant kraken
earnest phoenix
quartz kindle
#

:^)

radiant kraken
quartz kindle
#

voltrex you already have sayuri, stop hitting on null

#

:^)

radiant kraken
#

@civic scroll

earnest phoenix
#

Damn I have unfortunately been caught in 8000K

quartz kindle
#

in over 9000K

earnest phoenix
#

🏃‍♂️

quartz kindle
#

LGHDTVJWSP++

lament rock
#

optional chaining itself isn't unsafe, but in certain aspects can enable such behavior

radiant kraken
#

this is the first time i see a non-rust dev get concerned about unsafe

quartz kindle
#

in typed languages there is no such thing as dynamic interfaces where methods can be nullable, so there is no need for such feature

#

in js its possible, even if its never done in practice, so features like optional chaining are needed, because the language itself allows for those things

#

its basically ducktape solutions to things that exist as a side effect of js's design

civic scroll
#

@quartz kindle 😭

lament rock
#

Which perhaps it's designed the way it is specifically to avoid some of the nuances of type safety

quartz kindle
#

perchance :^)

sage bobcat
#

One message removed from a suspended account.

daring plaza
#

Can you make slash commands only show in certain servers? For example; for general bot maintenance I have a few commands I like to use, currently I have them done by prefix so server owners cant see the commands etc, but it's the only reason I need message intent for, so I'd like to remove it if possible.

deft wolf
#

Yes, you can

sage bobcat
#

One message removed from a suspended account.

deft wolf
#

Or just google it

sage bobcat
#

One message removed from a suspended account.

spark pebble
sage bobcat
#

One message removed from a suspended account.

spark pebble
sage bobcat
#

One message removed from a suspended account.

deft wolf
spark pebble
daring plaza
deft wolf
#

In that case, I can't help you because I haven't touched python at all

daring plaza
quartz kindle
#

global commands show up in all servers

#

guild commands only work on specific guilds

#

and you create them on a per-guild basis

daring plaza
earnest phoenix
#
import discord
from discord.ext import commands 
import asyncio
from discord import Activity, ActivityType
from datetime import datetime
from discord import ActionRow, Button, ButtonStyle
import random
intents = discord.Intents.default()
intents.members = True  
intents.guilds = True
intents.messages = True
intents.reactions = True 
intents.presences = True
intents.message_content = True


bot = commands.Bot(command_prefix='!', intents=intents)
bot.remove_command("help")


# ========== On Ready / Status ==========

@bot.event
async def on_ready():
        print(f'[+] Logged Into {bot.user}')
        await update_status()
async def update_status():
    while not bot.is_closed():
        server_count = len(bot.guilds)
        await bot.change_presence(activity=discord.Streaming(name=f"{server_count} Servers! | v0.0.01", url='https://twitch.tv/Vaypt_rz'))
        await asyncio.sleep(1)
  
    print(f'[+] Logged Into {bot.user.name}')
bot.start_time = datetime.now()

# ========== Command Loader ==========

await:

    bot.load_extension('moderation')
    bot.load_extension('utility')

# ========== Token Login ==========

bot.run('')```
#

It gives me an invalid syntax

#

for the bot.load_extension

#

That's not how you use the await keyword

#

breh

sharp geyser
#

load_extension takes in a file

earnest phoenix
#

The await keyword can't be used as a block to resolve all promises inside, it should be

await bot.load_extension(...)
await bot.load_extension(...)
sharp geyser
#

also you dont even need to await it iirc

earnest phoenix
sharp geyser
#

ah right

#

also here's a better example

#

its more updated

earnest phoenix
#

ah hell no, I'll just seperate my commands, that's confusing my small brain

sharp geyser
#

whats confusing about it

#

Its better to ask questions than give up

earnest phoenix
#

the layout of it, in that example, how do I even make it work, it's hard to understand

earnest phoenix
sharp geyser
#

Okay so essentially

#
    async def setup_hook(self): #overwriting a handler
        print(f"\033[31mLogged in as {client.user}\033[39m")
        cogs_folder = f"{os.path.abspath(os.path.dirname(__file__))}/cogs"
        for filename in os.listdir(cogs_folder):
            if filename.endswith(".py"):
                await client.load_extension(f"cogs.{filename[:-3]}")
        await client.tree.sync()
        print("Loaded cogs")

This part here is basically just overwriting the default nature of setup_hook by grabbing the folder where your cogs are os.path.abspath(os.path.dirname(__file__)) this part just grabs the directory where the current file is which usualy is your main.py in the root of the path and you'd have a cogs folder in that root as well. Then it loops through the files of your cog folder and gets the files that only end with .py and loads them as cogs.whatever. client.tree.sync() is only useful if you are doing application commands which you can skip if you're not.

#
#cogs / test.py

from discord.ext import commands

class Test(commands.Cog):
    def __init__(self, client):
        self.client = client
    
    @commands.hybrid_command()
    @commands.cooldown(1, 10, commands.BucketType.user)
    async def hello(self, ctx):
        await ctx.reply(f"Hello {ctx.author.mention}")

async def setup(client):
    await client.add_cog(Test(client))

as for this, ignore @commands.hybrid_command() and simply do @commands.command() and make the function with self,ctx and do what you'd normally do

#

make sure to have a setup though where you're doing client.add_cog() to register your cog

earnest phoenix
#

I'm just gonna stick to what I'm doing, that's over the top

#

I don't feel like putting in that much effort

sharp geyser
#

fair enough

#

gl maintaining your bot then :p

earnest phoenix
#

it's not hard to do the way I'm doing it

lyric mountain
#

quick tip, the more effort u put now, the less trouble u have later on

#

especially for handlers (cmd, error, permission, etc)

sharp geyser
#

more effort you put now, better programmer you become

lyric mountain
#

so trust me, dont leave it for later

sharp geyser
#

I already know ima be rewriting my stuff a lot

#

I don't take my own advice so :p

lyric mountain
#

the future me hates when I don't ask the past me for advices

sharp geyser
#

the future me hates me when I disregard what i planned on doing to do something arguably worse

tulip ledge
#

Is there a way to download an image from a github using code?

neon leaf
#

no ty

wheat mesa
#

@harsh nova bonk

harsh nova
#

no advertising

harsh nova
wheat mesa
#

sounds a lil sketchy “organic growth”

earnest phoenix
tulip ledge
#

wait, can't I just clone the repo?

#

x)

earnest phoenix
tulip ledge
#

yeah but it didn't work in my code ;-;

earnest phoenix
#

And yes you can just clone the repository if you want, though if you only care about its contents and not history then you can clone with a depth of 1

tulip ledge
#

alr I'll just clone with a depth of 1

#

ty

sharp geyser
#

@earnest phoenix got intellisense for event names to work by just overriding it for the client specifically like this, idk if its still needed to do it to the event emitter as well but ye

tulip ledge
sharp geyser
#

fuck around and find out /s

earnest phoenix
wheat mesa
sharp geyser
#

seems pointless if im overriding directly in the client class

earnest phoenix
#

You don't need to

wheat mesa
sharp geyser
#

ok

#

Honestly my biggest worry is going to be interconnecting everything

#

like attaching channels to guilds, messages to channels, etc

#

without causing a performance hit

tulip ledge
#

are you making your own discord library?

sharp geyser
#

Yessir

#

so far so good

#

just stressful

#

a lot more to think about than I thought

tulip ledge
#

sounds difficult but interesting, might give it a try later on aswell

sharp geyser
#

be prepared to have a world of pain

#

tho if you're not making it for mass use and solely for your use only it shouldn't be too hard

tulip ledge
#

I'd probably make it for my own use tho

#

and just use the endpoints my bots require

sharp geyser
#

a lot easier than

tulip ledge
#

to increase performance i suppose

sharp geyser
#

you dont gotta worry about adding support for everything

#

I on the other hand am making it for mass use

#

and trying to keep it at as light weight as possible

tulip ledge
#

might give it a try when it's finished

#

so hit me up when it's done

sharp geyser
#

Coming to the public soon in 2025 /s

wheat mesa
#

“When it’s done” is a statement that will never be true in the world of discord libraries

sharp geyser
#

indeed

sharp geyser
#

especially since every few months discord adds breaking changes

tulip ledge
#

you get what I mean right

sharp geyser
tulip ledge
#

when you release it

sharp geyser
#

I know

#

Fun with every major api update some endpoints change and or gets deprecated

marsh lark
#

when a major update introduces breaking changes 😱

sharp geyser
#

when discord.js then breaks it even further scream

#

My goal is to hopefully not have to release too many breaking changes

#

tho in the beginning a lot of that will be happening

#

So I do not recommend anyone using it even if its released for a few months KEKW

marsh lark
#

just dont release v1.0.0 until you think everythings good

sharp geyser
#

ofc

#

but I am also indecisive so I change things a lot

marsh lark
#

lol

tulip ledge
#
TypeError [ReqResourceType]: The resource must be a string, Buffer or a valid file stream.
    at GuildEmojiManager.create (C:\Users\Yarne\Desktop\Currentprojects\EmojiBot\node_modules\discord.js\src\managers\GuildEmojiManager.js:54:28)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  code: 'ReqResourceType'
}

Anyone have a clue? I've tried feeding it a url to the image, an image, a buffer and a base64 data url but I always get this error.

sharp geyser
#

Whatever you are giving it is not a valid type

#

Show code

tulip ledge
#
client.on("ready", async () => {
  let index = 1;
  let image = `../sprites/${index}.png`;
  let bitmap = fs.readFileSync(image);
  let b64 = new Buffer.from(bitmap);
  console.log(b64)
  let guild = await client.guilds.fetch("1143239475573563402");
  guild.emojis.create(b64, `fighter-${index}`);
});
#

I tried feeding it the bitmap, the buffer, the base 64 url

wheat mesa
#

Is that really how you’re meant to load a Buffer? I don’t see why you need a new here

tulip ledge
#

well even without it doesn't work

pale vessel
#

readFileSync should already be a buffer since you didn't specify encoding

tulip ledge
#

well even using the bitmap gives the same error

#

base64 strings don't work either

#

I'm really confused

pale vessel
tulip ledge
#

"discord.js": "^14.13.0"

pale vessel
#

shouldn't you provide an object with the options instead?

tulip ledge
#

ah well

#

now it works

#

I think I might havbe been looking at the wrong docs

#

ty

earnest phoenix
#

Can anyone help me

radiant kraken
#

discord will eventually introduce breaking updates

earnest phoenix
#

        try {
            if (message.guild === null) return;
            if (message.author.bot) return;
    
            const embed = new EmbedBuilder()
             .setColor('Red')
            .setDescription(`*Hey a new message got deleted!* \n\n **Author:** ${message.author.tag} \n\n **Channel:** ${message.channel} \n\n **Message:** ${message.content || "*No message provided"}`)

            if (message.attachments.size = 1) {

                embed.setImage(`${message.attachments.first()?.url}`);
            
            }

            if (message.attachments.size > 1) {
                embed.addFields({ name: `• Attachments`, value: `> ${message.attachments.join('')}`})
            }
    
            return send_log(message.guild.id, embed);
        } catch (err) {

        }
        
   });```
#

why does it not work?

#

( for logs )

#

no errror message njothing

craggy pine
#

Because atleast reading this code, return send_log(message.guild.id, embed) is unknown to us, we'd need to also know what that function does.

#

Also adding console.log(err) in the catch (err) part will tell you the error assuming its from this block.

lyric mountain
sharp geyser
#

dw it gets worse /s

radiant kraken
#

whats wrong with it?

lyric mountain
#

Idk, the whole buffer juggling is weird

#

Plus u need to instantiate an html element to be able to edit it (the image)

radiant kraken
#

i frequently use JS Buffers and they're not that bad

lyric mountain
#

Also while u have a bunch of useful stuff like css styles, it also misses some stupid basic features like shapes

#

Everything has to be done with paths

radiant kraken
#

css is meant for styling

lyric mountain
#

I mean editing the image

hexed smelt
hexed smelt
#

Fixed

earnest phoenix
quartz kindle
#

you have to show the errors by logging them in the catch block

quartz kindle
radiant kraken
craggy pine
sage bobcat
#

One message removed from a suspended account.

radiant kraken
sage bobcat
#

One message removed from a suspended account.

earnest phoenix
sage bobcat
radiant kraken
#

thanks faithie

radiant kraken
sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

earnest phoenix
#

No give me one second I'm preparing [

sage bobcat
#

One message removed from a suspended account.

radiant kraken
#

]

sage bobcat
#

One message removed from a suspended account.

earnest phoenix
radiant kraken
#

dereference me sdTroll

sage bobcat
earnest phoenix
radiant kraken
earnest phoenix
#

Not if it can self-heal at a rapid rate troll

radiant kraken
#

but even then you'll still never be able to retrieve the value from null sdTroll

#

trolling successful

earnest phoenix
#

I don't want to retrieve the value, I simply want to repeatedly dereference null, for a special case troll

compact pier
#

What is the min spec for a vpn server?

#

that only me uses

sage bobcat
compact pier
#

Well I just want to ask and see if someone here had experience on building that kind of server

#

you don't have to do that, I can google by my self

lyric mountain
#

ofc it'll feel like shit with low bandwidths or very weak cpus, but they'll work

#

if we're talking about recommended, then most baseline commercial VPSses will suffice as long as it's not some unknown service provider

#

as those usually use very cheap or refurbished parts for their servers

#

the only 2 important specs are bandwidth and cpu, everything else is irrelevant as ur just routing traffic

earnest phoenix
#

Error: Cannot find module '/home/runner/Assistant/index.js'
Require stack:

  • /nix/store/qpnf0dafrfsbcwb4z7cphjm0dff0vl7l-prybar-nodejs-0.0.0-e0d9a52/prybar_assets/nodejs/module-context-hook.js
  • /tmp/prybar-nodejs-186380334.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:995:15)
    at Function.resolve (node:internal/modules/cjs/helpers:109:19)
#

plz help

wheat mesa
#

Show your file structure

sharp geyser
#

Yea idk if I wanna model a guild object anymore

#

the shit is massive and im sure most of it is not even useful but idk

#

nope all of it is useful

tulip ledge
#

I'm quite interested

sharp geyser
#

Its literally just me looking at discord.dev to see how the object is supposed to look like and making properties on the class for them

frosty gale
#

so i got played

sharp geyser
#

ofc it exists

sharp geyser
#

wtf is discord-api-types doing

#

why is it both nullable and undefined

#

💀

radiant kraken
sharp geyser
#

I dont see how it would never exist on a guild member object

#

if someone doesn't have a nick just make it nullable

radiant kraken
#

shrug

#

discord api is weird sometimes

sharp geyser
#

it makes it weird putting it into the lib

radiant kraken
#

just copy discord.js mmLol

sharp geyser
#

BRO WHY IS IT LIKE THIS

#

dates are represented as strings and its also nullable and undefined

#

😭

radiant kraken
pale vessel
sharp geyser
#

I've heard of normal timestamps

#

Okay then what is discord doing

pale vessel
#

could be from partial member objects

sharp geyser
#

I mean sure

pale vessel
#

for example members that haven't passed the screening

sharp geyser
#

man I don't wanna have to handle any of that in my lib

#

doing partials is pain

radiant kraken
#

thats the perks of making a discord lib

sharp geyser
#

nope

#

man structuring this stuff is annoying but whatever

#

I now understand why discord.js has teams of contribs 😔

radiant kraken
#

fr

#

and how its codebase is so complex

sharp geyser
#

trying to connect a guild member to a guild object and vice versa

sharp geyser
radiant kraken
#

discord.js may have teams of contribs

#

but you have @earnest phoenix mmLol

sharp geyser
#

lmao

#

ye i'd rather not leech off voltrex too much

civic scroll
#

he'd happy to help you

sharp geyser
#

yea but idk if ima continue the lib

#

its starting to get too stressful

radiant kraken
#

inb4 voice

sharp geyser
#

thats what I dread

wheat mesa
#

voice is the most fun part

#

dealing with opus encoding

crystal wigeon
#

hey is there a way i can fetch all the guilds my bot is in? using the discord api

#

i cant seem to find any route

#

discord.com/api/v9/guilds i tried this route but got 404

#

is there a way i can check when my bot was added to the guild?

warm surge
#

it also runs off api

crystal wigeon
#

i found the api

warm surge
#

ah

crystal wigeon
#

users/@me/guilds and send the bot token in auth

warm surge
#

ah

crystal wigeon
#

like can i make 100 api calls in a second or is there like a bulk delete end point

#

like for guild leave

wheat mesa
#

global ratelimit

crystal wigeon
#

nvm

#

its 50

#

kek

#

ty

wheat mesa
crystal wigeon
crystal wigeon
# wheat mesa

ngl this bs is scam. I literally only made 2 api calls using promise and i get rate limited

wheat mesa
#

global ratelimit is a generality, some endpoints have special ratelimits

#

such as changing your client's status

crystal wigeon
wheat mesa
#

probably has a special ratelimit

lament rock
#

@sharp geyser The solution is to use the raw API and only develop stuff that might be helpful

crystal wigeon
#

is there a bulk guild delete api

lament rock
#

Not deleting multiple guilds, no

#

Bots can only own 10 at max though

lament rock
# sharp geyser Huh

For example, don't abstract the API to be class based like djs or other libs and just use the raw lib and then instead, only export helpful stuff like Snowflake utilities or whatever

sharp geyser
#

hm

sharp geyser
#

just make methods for interacting with the gateway/api

#

Though I don’t think that’s in part to what I want to achieve with this lib

pale vessel
#

or CloudStorm for WS

earnest phoenix
#

whats the issue? i ddint got it

quartz kindle
deft wolf
#

What is "colors"?

earnest phoenix
quartz kindle
#

why did you add it?

earnest phoenix
#

but i forgot now why u added it

quartz kindle
#

lol

deft wolf
#

You can use hex codes in embeds

quartz kindle
#

you dont need any module to add embed colors

earnest phoenix
deft wolf
#

Also it's so outdated bot

earnest phoenix
#

it fixed

earnest phoenix
deft wolf
#

discord-buttons module kapp

quartz kindle
#

if that code copied from some github bot?

deft wolf
#

If I remember correctly it was created for discord.js v12

#

Or something like that

#

Also a message when you go to the npm page of that module

earnest phoenix
deft wolf
#

Yes, but most of the code from v12 may be outdated and incompatible with the new api

earnest phoenix
deft wolf
#

Then you have a bug somewhere in your code

#

As I wrote, most people will not be familiar with v12 because it is an outdated version that is probably a little over two years old

#

It's better to write from scratch on a newer version than to fix something that may fall apart after some time

lyric mountain
#

v12 will barely work after the api changes

#

just upgrade at once

peak drum
#

The good old times of v12 KEKWSlide

sharp geyser
#

I do think I’m going about it the wrong way though

frosty gale
#

bro is trying to be unique

wheat mesa
#

it's a good project to learn a lot

frosty gale
#

probably

#

although i would argue most of it is annoyingly implementing every api method/gateway event discord supports

#

some of it is websockets/compression (maybe)/audio if you get to that but other than that

#

though probably a good lesson in object/class structure and organising everything/making stuff work/stick together in a sense

sharp geyser
#

No one is trying to be unique here

#

Thats harder to do in a discord lib than it is making an actual bot

frosty gale
#

thats why i said that when i thought you tried to be unique 😭

sharp geyser
#

not at all

frosty gale
#

bc theres not much room for being unique other than maybe faster or better resource usage

sharp geyser
#

the only thing I want to do is make it an easy lib for beginners

#

with not as much resource usage as djs is which mind you is already a hard thing for someone like me

wheat mesa
#

I'd be interested in seeing a ts framework that supports decorators for commands

#

I considered doing it but I'm too lazy

sharp geyser
#

I tried that

#

its not as fun as you think

#

😭

little niche
#

When do they start reviewing requests (around what time)?

sharp geyser
#

There’s no set time

#

They do it whenever they feel like it

#

The only thing they have is a monthly quota (iirc)

limpid rain
#

Hello

sage bobcat
#

One message removed from a suspended account.

sharp geyser
#

might be weekly

#

idk

prisma nebula
#
import requests
import asyncio
from discord.ext import commands
import discord
import json
from bs4 import BeautifulSoup

class template11(commands.Cog, name="template11"):
    def __init__(self, bot):
        self.bot = bot

    @commands.hybrid_command(name="server-status", description="Get the current server status.")
    async def server_status(self, ctx):
        try:
            url = "https://www.growtopiagame.com/detail"
            headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
            }

            # Retry multiple times in case of failures
            max_retries = 5
            for _ in range(max_retries):
                response = requests.get(url, headers=headers)
                if response.status_code == 200:
                    break
                await asyncio.sleep(2)  # Wait before retrying

            if response.status_code != 200:
                if hasattr(ctx, "interaction"):
                    await ctx.interaction.response.send_message("Failed to fetch server status.")
                else:
                    await ctx.send("Failed to fetch server status.")
                return

      ```
#
      soup = BeautifulSoup(response.content, "html.parser")
            data_script = soup.find("script", text=lambda text: "online_user" in text)

            if data_script:
                json_data = json.loads(data_script.text.split("{", 1)[1].rsplit("}", 1)[0])
                online_users = json_data.get("online_user", "N/A")

                # Construct the response embed
                embed = discord.Embed(title="Growtopia Server Status", color=discord.Color.blue())
                embed.add_field(name="Online Users", value=online_users)

                if hasattr(ctx, "interaction"):
                    await ctx.interaction.response.send_message(embed=embed)
                else:
                    await ctx.send(embed=embed)
            else:
                if hasattr(ctx, "interaction"):
                    await ctx.interaction.response.send_message("Online user data not found on the page.")
                else:
                    await ctx.send("Online user data not found on the page.")
        except Exception as e:
            error_message = f"An error occurred: {str(e)}"
            if hasattr(ctx, "interaction"):
                await ctx.interaction.response.send_message(error_message)
            else:
                await ctx.send(error_message)

async def setup(bot):
    await bot.add_cog(template11(bot))

#

Sorry for sending them 2 parts but my oc broke suddenly and I can't send them as .txt

#

Here's the error . Is it because of hybrid or because of the message type?

wheat mesa
#

first thing you should be doing is deferring an interaction

#

it's possible the interaction expired because you didn't defer it

prisma nebula
#

Ah

#

I reached this method after too much attemps

#

I me I used too much types and diff codes

#

I tried to play woth the code alot

#

Anyways thanks I'll check

scenic kelp
slim heart
#

yeah

scenic kelp
#

i love JPBBerry discord lib

#

(renamed by AI)

slim heart
#

renamed by ai

radiant kraken
#

do you still happen to work on discord-rose

#

haven't heard that name in years

sharp geyser
slim heart
#

jadl is the one with decorators

#

discord-rose still works but is dep

radiant kraken
#

ah ic

sharp geyser
slim heart
#

just another discord library mmLol

sharp geyser
#

Looks bad /s

#

Mine better

slim heart
#

jadl was just for scale, jadl/cmd is like fancy decorator shit

untold eagle
#

how do i trigger an event on voting for my Server in JDA (java)?

earnest phoenix
#

@robust trellis

lofty shale
#

how can get the members has role after deleted

#
module.exports = {
    name: Events.GuildRoleDelete,

    /**
     * 
     * @param {Role} role 
     * @param {Client} client 
     */

    async execute(role, client) {
        await role.guild.members.fetch();

        const membersWithRole = role.guild.members.cache.filter(member => member.roles.cache.has(role.id));

        console.log(`Members with role ${role.name}:`);
        membersWithRole.forEach(member => {
            console.log(member.user.tag);
        });
#

can use this thing ?!

#

discord.js v14

compact pier
compact pier
#

Maybe look at the GuildMemberUpdate event

compact pier
lofty shale
#

I mean use Events.GuildRoleDelete

compact pier
#

You can't (I guess, never try it. On theory)

lofty shale
#

role.members

compact pier
#

try it and look

#

My suggestion would be, that you use GuildMemberUpdate event, because when a role got removed from a user, then it will trigger the event.

warm surge
#

bruh i miss read everything but still use guildmemberupdate

lofty shale
rustic nova
#

just sync it up with the audit log

#

fetch the most recent audit logs, check if the action is related to roles (deleted roles, remove roles from a member) and check what roles were removed/deleted/added/whatever

warm surge
#

^

surreal sage
#

What's a site like Pastebin but for code?

marsh lark
#

pastebin, sourcebin, github gist

#

pastebin can be used for code too

surreal sage
#

sourcebin is what i was looking for

#

thx

frosty gale
#

so the others dont matter? 🙄

surreal sage
#

yes, they don't.

frosty gale
#

bit upfront but okay

surreal sage
#

😊

sage bobcat
#

One message removed from a suspended account.

sage bobcat
#

One message removed from a suspended account.

tulip ledge
#

Anyone knows why this conditional typing doesn't work?
filter: "id" | "name", character: typeof filter extends "id" ? number : Name

#

am I doing it wrong?

#

nvm fixed it

#

I was doing it wrong

frosty gale
#

bro has not seen gpt 4 or 3 for that matter

lament rock
#

Nuero-Sama

slender wagon
#

do you guys think it would be better if i used unix timestamps instead?

rustic nova
#

if the DBMS already supports dates natively, dont think you need to

neon leaf
#

did anyone here ever setup ipv6 in proxmox on a hetzner system?

rustic nova
#

I did think about setting up a proxmox before, though ngl dont have the time and money for it

gaunt echo
#

how to , another website in my website

lyric mountain
#

use <iframe>

gaunt echo
lyric mountain
#

what?

gaunt echo
#

My main web site have https, bot web have http

#

iframe dnt supp http

lyric mountain
#

you cant then

#

iframe is the only way of embedding a site

gaunt echo
#

hmm,ty

covert ingot
#

Got a question, Im not being consistent with my coding projects, and stopped coding, and I remember around the time I stopped coding - around a year ago, there were some changes going on with git. I can't find, what I remember to be, git line? Am i mistaking this for something?

earnest phoenix
round cove
#

Am I crazy? I thought there was a way to have an array or roles from slash command options.

rustic nova
#

Crazy? I was crazy once

deft wolf
#

No, pls stop

deft wolf
#

Good luck

spark flint
#

🗿

#

rip your acc

#

if you disable for more than 14d it deletes your account fully and cannot be reversed

#

oh wait

#

did they change that?!?!

thick path
#

Guys how can do/learn vote checker system on my bot?

spark flint
#

it used to be 14d/30d before deleted fully

rustic nova
#

Deleting does it

spark flint
#

i thought it used to tbh KEKW

frosty gale
#

if discord disables it then it starts the 14d timer

#

but other than that i think its fine

little stone
#

Anyone able to help me figure out why my bot was declined? I'm new to Top.gg and am really unfamiliar with the process. I did some reading which said I should get something saying why it was declined but I don't see anything.

#

OH, it seems like it'll be in the #mod-logs. Lemme dig through there.

#

Yep, I figured it out. No worries happ

deft wolf
#

Can someone ban him already?

spark flint
#

Lol

deft wolf
#

Yea, he's using self bot to ghost ping you

soft laurel
#

I have an EntitySelectMenu that is retaining it's selection after editing the message. I'm wanting the values to be reset when the message is edited. I'm using the java JDA discord library. Any thoughts?

whole glen
#

Why did people dislike my question and close it on stack overflow?

I have this code but it only works when put in the HTML file while it does not in the js file that the other js code works in.

       const container = document.getElementById("scroll");
    
        container.addEventListener("wheel", function (e) {
          if (e.deltaY > 0) {
            container.scrollLeft += 100;
            e.preventDefault();
          } else {
            container.scrollLeft -= 100;
            e.preventDefault();
          }
        });
#

The guy who closed it does not know what he is talking about because it works

wheat mesa
#

SO is usually pretty toxic for questions that aren’t super complex

#

A decent amount of overconfident people trying to receive validation because they are insecure and have an inferiority complex tbh

whole glen
#

Now my stackover flow is banned from questions for 2 days

quartz kindle
#

when do you load the js file?

whole glen
#

At the header with <script src="/script/script.js"></script>

quartz kindle
#

put it at the end of body

whole glen
#

Ok

#

Works thanks

quartz kindle
#

👍

lament rock
#

Oh hi tim

#

damn that was fast

quartz kindle
#

lmao

#

its 3 am, i need sleep

#

just finished giving a 3 hour class on js oop

#

i need ideas for an interesting "final project" to make my students do

lament rock
#

How smart are they

#

Final project should be reflection

quartz kindle
#

some of them are geniuses

#

but its mostly first timers and newbies

#

so it cant be anything too complex

#

went through bind/call/apply today and i felt like some of them didnt quite get it

soft laurel
#

for those interested deleting the message and sending a new one does the trick 👍

whole glen
radiant kraken
pale vessel
#

e go 📉

rustic nova
#

e o 📉

real rose
#

o 📉

marsh bluff
#

If anyone here is using patreon-discord npm library, have you found a solution to expiring access token? Have you additionally used the official patreon API to refresh the token?

covert ingot
#

im having problem setting up my dns. Not sure what im doing wrong but my website isn't loading when I try go on it.

#

On my vps, it is showing the application has been running for 7hours - Its just a really simple personal website

#

not sure what im doing wrong, any ideas?

spark flint
#

thats not the same as DNS

#

thats reverse dns

#

so if i was to go and look up your IP address, it would show your domain as the reverse DNS

#

(helps hosts set server names, etc)

#

if only we had 1.1.1.1 bot here gato

grim aspen
#

flashbacks to cybersecurity class setting up dns with windows server 2022

spark flint
#

lol

grim aspen
#

It was a pain

spark flint
#

dns is always a pain tbh

#

@covert ingot you do not have any nameservers setup for your domain

grim aspen
#

You do need that

spark flint
#

i would recommend using Cloudflare since they can handle SSL for you and proxy it for you

#

and its free

grim aspen
#

^

covert ingot
#

I will try cloudflare and let u know. thanks

spark flint
spark flint
#

yeah its great

#

plus its open source

#

also the name dns over discord KEKW

covert ingot
#

Probably a stupid question - but where do I change the nameserver? Using 123-reg for domain and GG for vps

#

on 123-reg it says invalid, probably doing it wrong let me look more

covert ingot
# spark flint

I think i done it - would you be able to double check for me if i done it correct

spark flint
#

I’ll check now

covert ingot
#

thanks

spark flint
#

Not yet

#

Might take a bit to update

covert ingot
#

i just restarted pm2 cuz thought that would fix it - still when i go on website doesnt load. maybe thats y it errored? not sure

rustic nova
#

Keep in mind that your DNS results are cached, so if your DNS did update and works fine on another device, it likely won't on your current one as the result is cached

#

Had that too

covert ingot
#

so uh how do i fix that

#

I'm getting this, gona try fix - if anyone knows what to do this is whats happening :

rustic nova
#

Consider looking into how to properly work with dns

#

As well as what cloudflare proxy is

covert ingot
#

thats what im trying to learn yh

#

on vps it is showing there are no problems

lyric mountain
#

you authorize and then get an access token + refresh token

#

and the expiration ofc

#

save those 3 data to the database, whenever you reach the expiration date use the refresh token to request another token

#

also mind you, patreon is terrible to work with, idk how abstracted that lib is but expect a lot of headache

marsh bluff
#

Conceptually yes, but Patreon API is documented quite poorly, and the only way for oauth i found to work is for pledged members, not for the patreon creator

rustic nova
#

It's your DNS setup

lyric mountain
#

I meant both conceptually and documentation

#

the whole thing is a convoluted mess

rustic nova
#

That is why I'm telling to look into what DNS is and what cloudflares proxy is

lyric mountain
#

they put 10 parts with the same name in the payload and let you figure out which one is the field you want

covert ingot
#

I am doing that, trying to work it out still

#

no luck so far

marsh bluff
#

The /token endpoint which returns access and refresh token only works if code parameter is provided, and as far as I understood i can only get it from a logged in pledge member

lyric mountain
#

yes, but once you have the refresh token you can use it directly (to refresh the access token)

covert ingot
rustic nova
#

Disable your proxy, and see what error you get when visiting your website

covert ingot
#

same

#

disabled both

marsh bluff
lyric mountain
#

yw

rustic nova
#

What do you see now

#

Still cloudflare?

covert ingot
#

same

rustic nova
#

Or do you not get cloudflare anymore

covert ingot
#

exact same

rustic nova
#

Ctrl+f5

covert ingot
#

nothing changes

rustic nova
#

Then you're still using cloudflare proxy, make sure you've saved your changes on your dns

covert ingot
#

wait i turned them back on, 2 secs

#

changed from london to manchester

#

only difference error code still same

#

I can use any port, or does it have to be a designated port btw

#

maybe thats y?

rustic nova
#

It has to be 80 if you're planning on using cloudflare

#

That is why I said to look into what cloudflare proxy is

covert ingot
#

i've been looking into it - still can't find fix. changed port to 80

rustic nova
#

Can't help you then

quartz kindle
#

there was another account that posted that exact same text, or was it also you?

#

smells fishy

lyric mountain
#

@rustic nova that guy again

deft wolf
#

Seems legit TROLL

rustic nova
#

@crude orchid please avoid posting recruitment things anywhere on the server

#

since I haven't properly warned you yet, consider yourself warned now

crystal wigeon
#

anyone uses hostinger?

deft wolf
#

Only for tutorials kappalul

crystal wigeon
#

and i see some positive reviews tho

deft wolf
#

It probably depends what you need. It's best to look at different hostings and choose the most suitable offer

#

And after checking, for example, vps hosting, it seems to me that $ 14 per month is quite a lot for the smallest package

#

Maybe it's worth the price in other aspects than just the number of cores and the amount of ram

crystal wigeon
#

compared to me paying 40$ a month for 4CPU 8GB RAM on vultr hosting

deft wolf
#

Not really

crystal wigeon
#

ah ig this without tax

#

or we seeing different prices because of the region?

deft wolf
#

You pay $6 per month when you buy hosting for a whole year

#

If you want to pay monthly then you pay $14

crystal wigeon
#

$13 for me, for 4cpu and 16gb ram

#

which is alr so cheap

#

why so cheap whats the catch

deft wolf
#

Click it

#

And look at total

#

At the end

crystal wigeon
#

ah its 13$ per month for 12 months

#

still cheap imo

#

hmm

#

183$ for a year, with that resources is still good

#

4cpu, 16gb ram, dedicated ip, 200gb ssd

#

pretty huge resources for low price. whats the catch here, hmm

#

no firewall ig or something idk

#

ig KVM and VM are different?

#

it looks like they spike CPU usage on purpose to get you to buy a better plan hmm, red fag 1

#

ye okay im seeing bad reviews now lol

rustic nova
#

check htop

#

unless you didnt buy one yet

#

just get contabo or hetzner

#

pretty trustworthy

crystal wigeon
# rustic nova unless you didnt buy one yet

didnt buy yet just checking some reviews. One review said they show high CPU usage (wrong info) and just kill your website to get your to upgrade with 403 itseems. sounds pretty bad

deft wolf
rustic nova
#

hetzner works pog

#

no issues at all

#

price around $34 for a dedi

crystal wigeon
#

why contab no have 4cpu 8gb ram kekcry they start with 24gb ram

#

way too much for me

#

amd processors hjmm

earnest phoenix
#

Hetzner is awesome

crystal wigeon
#

tf hetzner why i gotta submit my ID Proof lmao

earnest phoenix
#

Fraud protection

crystal wigeon
#

ic

#

how come other providers dont need kekcry overkill imo

crystal wigeon
earnest phoenix
#

Yeah, though Hetzner servers are crazy cheap for the specs they provide

lyric mountain
#

ur looking at virtual dedis

crystal wigeon
#

i was looking at dedicated vps

#

dedicated is better no?

lyric mountain
#

well, it's the whole server for u exclusively

crystal wigeon
#

yeah the whole machine right

#

thats what vultr offers too right?

#

dedicated cpu and ram

lyric mountain
#

it's 3 phys cores btw, so 6 virtual cores

earnest phoenix
#

If you aren't gonna host something big or do something really resource-intensive on a dedi then it's a waste of money

deft wolf
#

I have 12gb of ram and I only host a bot on discord masnakappa

crystal wigeon
#

gotcha, i always thought dedicated VMS are meant to be exclusive for you, and cloud vps is shared right? so if someone else is compromised my appl is also at risk?

deft wolf
#

It's just a waste of money but at least bot is working

crystal wigeon
#

kekcry same here

#

i wasted so much money

earnest phoenix
#

It's "shared" as in the resources and stuff are, if someone else does a fuck up in an instance of a shared VPS, that doesn't really affect you, unless they literally compromise the entire server running all the instances of those shared VPSs

deft wolf
crystal wigeon
crystal wigeon
#

talking about cloud vps and dedicated vps

lyric mountain
#

dedis are only worth if you're hosting something that'd demand a ton of resources from the server, like gaming (dedi host) or remote rendering

#

or some very big project

crystal wigeon
#

hmm i see

#

so vultr is cheaper in that way or used to be, cause they offer dedicated vcpu

lyric mountain
#

honestly, "dedicated vcpu" is ironic

crystal wigeon
#

ig i'll try contab, do they have refund and cancellation?

lyric mountain
#

cuz like, if ur buying a dedi you'd technically own the phys cpu

#

I mean, own in the sense of rent cuz u cant really take it from them

#

but anyway

crystal wigeon
#

yeah alr

crystal wigeon
#

just wanna make sure i get efficient resources when i use cloud vps

lyric mountain
#

iirc the formula is (threads * cores) * phys cpu = vcpu

spark flint
#

I would also recommend Datix

spark flint
#

Datalix

deft wolf
#

They are good, that's true

spark flint
#

But Hetzner is also bae

#

I don’t like contabo network

lyric mountain
neon leaf
crystal wigeon
earnest phoenix
spark flint
crystal wigeon
spark flint
#

It won’t matter unless you run a popular site with like lotsssss or traffic

crystal wigeon
#

thats what i calculated

#

32/12 = 2.6

spark flint
#

Monthly

crystal wigeon
#

yeah

neon leaf
#

afaik hetzner doesnt count incoming too

earnest phoenix
#

Guys

spark flint
#

Their dedi limit is like 250tb/month

lyric mountain
crystal wigeon
#

dafuq

neon leaf
#

I mean proxmox is just debian

#

just with custom kernel

earnest phoenix
#

I created own bot but it's getting saying unmodified of some kind bot
Wht do I do now

crystal wigeon
spark flint
#

Slow

lyric mountain
spark flint
#

Also the servers are kinda slow

crystal wigeon
#

200 mbits

#

hmm

spark flint
#

It struggled to even handle a basic Mongodb install

crystal wigeon
#

AMD processers yeah

spark flint
#

Even 100mbps is good

lyric mountain
#

never had issues with them, at least not after the infra change

spark flint
#

Unless you’re Amazon who lose hundreds of millions a year if it takes more than 2s to load a page, I wouldn’t worry about network speed that much

crystal wigeon
#

actually its needed for my discord bot

#

hmm

earnest phoenix
crystal wigeon
#

dont want it to be too slow

earnest phoenix
#

It's not fully

#

Copied

#

It's just some features

#

It's modified

lyric mountain
spark flint
#

I would just get an Ashburn server from Hetzner

earnest phoenix
#

Wht I will do now bro , I wanna grow my bot :/

crystal wigeon
#

tbh should be fine ig, i see that my vultr network speed is not more than 5mbps

spark flint
#

Ashburn gets 15ms ish ping to discord

neon leaf
lyric mountain
# earnest phoenix It's modified

you need to modify at least 51% to be considered not a copy (since the revs dont know the underlying code, consider this as "51% unique commands")

spark flint
#

Bot of mine hosted on an Ashburn server

crystal wigeon
#

does contab not offer like a free trial

spark flint
#

Nope

crystal wigeon
#

would like to try it before i buy hmm

spark flint
#

Most hosts don’t

spark flint
#

Due to abuse

lyric mountain
earnest phoenix
#

Like new commands tht he don't have?

crystal wigeon
#

mm

#

vultr does , they just give you free credit

lyric mountain
#

if the bot has 4 commands, u need at least 3 (as u cant have 2.04) new commands

neon leaf
#

big hosts like giving trials

earnest phoenix
#

It's have 500+ cmds

#

I didn't counted

lyric mountain
#

well, then yeah, a bunch of commands

earnest phoenix
#

Now what I do

spark flint
earnest phoenix
#

:/

spark flint
#

Since they generally ask for more details

#

Also they give in credit form

lyric mountain
#

the easier and most sustainable choice would be to simply write your own bot

#

instead of starting from an existing project

spark flint
#

Plus bigger hosts can live with the cost off abusers

#

Since they have large clients spending $$$$$$$

#

Timmy’s lil host can’t afford to lose the cost of servers compared to a large host

neon leaf
#

I was shocked when I found out hetzner sent me an invocie 1 day after I already had full access to the dedi without even asking for id

earnest phoenix
#

GCP (Google Cloud Platform) is also pretty good

spark flint
#

GCP my beloved

#

I have £1k AWS credits for 2 years

lyric mountain
#

any host that doesn't start with "Ora" and ends with "cle" is pretty good KEKW

spark flint
#

Plus their startup program also got me intercom for a year free for 10 agents

#

Which is worth like £7000 or smth stupid

#

and I also got Zendesk too

#

1 year for the full package with unlimited agents iirc

neon leaf
spark flint
#

I don’t even customise my vscode

#

Default font and colours all the way 🗣️ 🗣️ 🔥 🔥

earnest phoenix
#

I'm not sure if other VPS providers do this but GCP shuts down your server and changes your server's IP address if it goes into maximum load and stays like that, no static IP address assigned so it can be annoying for teams that work on the same server via SSH

lyric mountain
deft wolf
spark flint
#

Kinda like DigitalOcean, you can basically pay for the IP and add it to any server

earnest phoenix
#

Hmm yeah, though never saw that behavior in any other VPS provider