#dev-chat

1 messages · Page 29 of 1

daring wasp
#

no way it's unreal

patent carbon
#

No u

jade current
#

No, you're unreal

cunning pecan
#

Both can be true

verbal wraith
olive depot
jade current
viscid steppe
#

I love using ai to detect ai generated content

chilly nacelle
#

is there a definitive number on how many seconds before discord refuses to embed a link? I have a service like fxtwitter and despite it sending back the data in 2.2 seconds it still timed out after 5-10s on https://discord.com/developers/embeds

Discord Developer Portal

Build games, experiences, and integrations for millions of users on Discord.

dark moth
#

you will not find any help here breaking the ToS and copyright laws

viscid steppe
#

Yeah "how to bypass a bot detection for my bot"

novel ferry
#

Hello World

jade current
#

print

daring wasp
#

Does it seriously not have a warning for minimum lines of code 😭

verbal wraith
jade current
#

Why though. You could put a JS code in one line

daring wasp
jade current
#

Minimum white space characters

glass vortex
#

why_use(whitespace,characters)+at(all).to.code(anything);when=you(dont).need(to);it.makes+=no(sense);

daring wasp
#

oh nyo

weary bluff
glass vortex
jade current
daring wasp
#

Im pretty sure an ai would not be using names like scls siso sint
would probably be
safe_class_parse safe_iso_to_datetime

glass vortex
#

I'm pretty sure ai would use what the training data used. So the real answer here is: it might if you're the training data

daring wasp
#

or Am I perhaps SoraAI 3

jade current
#

Sora[T](a: T)

bleak pond
#

New version

viscid steppe
#

why would they make the text lightgray in a white background

#

the text is also super thin

verbal wraith
#

You aren't supposed to read it, just trust ai that the code is ai

vestal fractal
#

siso?

#

is that print

marble slate
#

similar to how you'd use <@user_id> or <@&role_id>

vestal fractal
#

ah safe iso thing

olive depot
#

Am i the only one whom yt ads don't bother much?

vestal fractal
#

why do you need to name it safe lul, doesn't it just do a conversion

upbeat anchor
vestal fractal
#

??

#

that'd mean almost every function would need to be named safe

marble slate
daring wasp
vestal fractal
# daring wasp

you're better off checking if it's none before passing to the function imo

#

and what's scls

daring wasp
#

for classes :p

#

scls(UserFlags, data.get("flags"))

daring wasp
vestal fractal
#

so

def scls[ClsT](cls: ClsT, val: Any, /) -> ClsT | None:
    if val is not None:
        return cls(val)
    return None

?

daring wasp
#

i use normal

self.timestamp = datetime.fromisoformat(data["timestamp"])

when guaranteed

daring wasp
vestal fractal
#

but just so you know you don't need a separate function for timestamp, you can do it with scls too...

vestal fractal
daring wasp
#

siso was born before scls

#

age superiority /j

vestal fractal
daring wasp
#

I also just realised that there's already a discord library called dispy-bot 😔

#

gonna rename it soon ig

jade current
#

disbot

daring wasp
# vestal fractal <:bart:1410714243954774248>

Literally my utils

from datetime import datetime
from typing import Any, Callable

def sint(txt: str | None) -> int | None:
    return int(txt) if txt else None

def siso(txt: str | None) -> datetime | None:
    return datetime.fromisoformat(txt) if txt else None

def scls[C](cls: Callable[..., C], data: Any, **kwargs: Any) -> C | None:
    return cls(data, **kwargs) if data else None
daring wasp
#

pydis?

#

pydis exists too.

jade current
#

botcord

daring wasp
#

I don't want cord

#

disssssbot

jade current
#

Me when py-cord and pycord

#

dis-py

daring wasp
daring wasp
#

🤔

jade current
#

datpy

daring wasp
#

batmanpy?

#

-# is this considered offtopic?

jade current
#

theirpy

daring wasp
#

atleast for this chat

#

I'll think up a name later

#

gonna name it discord-py fr
-# /j

vestal fractal
jade current
#

C in Python

daring wasp
vestal fractal
#

So callable[..., C] isn't useful

jade current
#

Huh

vestal fractal
#

You're essentially doing None | None if I get it right

jade current
#

Me confusius

#

Where'd you get init from

daring wasp
#

it calls __new__ first which returns an instance on which then __init__ is called i think

jade current
#

object.__new__() can be overriden to return None lol

vestal fractal
#

So C is the class type?

daring wasp
daring wasp
rugged vector
#

i feel so poor my laptop cannot open any website under 90 seconds 😭

daring wasp
#

although after new there's a check to see if new actually returned a proper instance

vestal fractal
vestal fractal
#

Just use a generic T

#

def scls[T](cls: T, ...)

daring wasp
vestal fractal
#

how

daring wasp
#

You pass Message class let's say, then the -> T would mean that the function returns the class Message not an object of it

vestal fractal
#

No

#

T: instance
type[T]: type (class)

#

Ofc T can also be type but you can use it this way

daring wasp
#

so you'd have to do scls(Message()) which defeats the purpose of the function

silent bane
#

y

daring wasp
vestal fractal
#

Ok so pass a class type

#

def scls[T](cls: type[T], ...)

daring wasp
#

lemme see

daring marlin
#

Any dev bot here?

#

Guys whats the best website to use to make my bot 24/7 online

verbal wraith
#

None, rent a VPS

patent carbon
#

But ya. As NyNu said. A VPS is the best way

#1478860733365354687 is all about that. Check the pinned messages in that thread

daring marlin
#

I dont want to rent

#

Am still young dont wanna get banned in discord so aint gonna say my age

trim geode
#

Then you don't get a server.

daring marlin
#

Bruh

#

💔

trim geode
#

You either pay money for the resources or you don't get the resources. Everything costs.

patent carbon
#

There's even a cost for running it at your home. Just that cost is more your work to set it up and electricity (which I assume your parents are paying, from you saying you're young )

trim geode
#

And the maintenance of the system and the actual purchase of any hardware.

#

Someone's always paying for it. It just depends on who and how much.

latent bay
#

Or you can just Host it yourself

trim geode
#

which still costs money...like we just described.

daring marlin
trim geode
#

side note: screw using RabbitMQ or another job worker...imma use Redis streams

daring marlin
#

W devs ong

verbal wraith
#

Don't turn off your device

trim geode
#

Which still costs money to someone lmao

daring marlin
verbal wraith
daring marlin
latent bay
#

You can host it in railway.com for free for 30 days 24/7 , after that you have to pay

daring marlin
#

So if i asked some1 to test my bot is that called self advertising?

latent bay
#

Idk

trim geode
patent carbon
trim geode
#

Which means during that entire time you're going to be spending effort trying to get around Cloudflare IP bans and try to stay within limits and also trying to avoid the automatic hibernation on free accounts if that's still a thing.

#

And then if you wanted to continue using Railway as a platform, you're going to have to get a dedicated IP address which is going to cost roughly $20/month on the Pro Plan.

winged swan
trim geode
#

Also should note I'm the one who was testing Discord bots on Railway a few years ago and actually brought the IP issue to Railway directly and got that information from the Railway team directly a few years ago.

daring marlin
#

Stop flexing on me💔

daring marlin
#

I need ur knowledge

trim geode
#

And if I remember correctly, and I would have to go back and actually look at the conversation I had with Railway, but I'm pretty sure they said that Discord bots in particular are not their target audience, and they will never try to necessarily go out of their way to support that on the free services.

patent carbon
winged swan
#

yuppp

trim geode
#

The incident

verbal wraith
daring marlin
#

@trim geode in ur opinion

#

Whats the best coding app

trim geode
#

There is no best coding app because it completely depends on the language you're developing in.

patent carbon
#

Or what type of tools you want

daring marlin
#

I used to code in notes pad on pc💀 now i switched to vsc

daring marlin
patent carbon
#

Like there's nvim which is just a terminal where you type with good hotkeys. Or there's VSCode that can do anything you want, if you install enough plugins. Or there's IDEs which work out the box, but are heavier to use

trim geode
#

Then it just comes down to tools if you're looking for a full IDE experience, if you're just looking for an editor experience, if you're looking for something slim, if you're looking for something a little bit more robust, if you're looking for something more commercially available, if you're looking for something for free or paid...

glass silo
#

Pycharm is technically the best one for Pithon

trim geode
#

Cause there's VSC, PyCharm, Zed, etc.

shrewd jackal
#

Bot fight

patent carbon
#

No one is fighting

trim geode
#

sublime text even

#

helix, nvim, etc

patent carbon
#

Sublime is nice if you just want syntax highlighting and typing

glass silo
#

When are we going to fight for that opal badge

daring marlin
#

OMGGGGG

shrewd jackal
daring marlin
#

MY BRAIN NOT BRAINING

#

I JOINED THE WRONG SERVER

patent carbon
daring marlin
#

@trim geode friend me rn

trim geode
#

nah im good

glass silo
patent carbon
#

If you have a question you can ask people here. Most people here don't accept friend requests

daring marlin
daring marlin
glass silo
#

Matt got introvert mode on /s

daring marlin
#

Mb mb no disrespect for the other devs

trim geode
#

I'm also like 30 with years of experience

verbal wraith
#

Unc

glass silo
#

UNC

daring marlin
trim geode
#

Fun fact chat, I've basically stumbled into this CTO role lmao

daring marlin
#

Guys chill

#

UNC

glass silo
#

guys chill

trim geode
#

This contract has basically turned me into a fractional CTO for this company, it's funny

patent carbon
#

You got equity share?

trim geode
#

I'm an independent contractor lol

patent carbon
#

F

trim geode
#

which is nice since it's just part time

patent carbon
#

Oh ya nvm that's nicer for part time

trim geode
#

And that if something goes wrong, im technically not responsible giggle

daring marlin
trim geode
#

Frankly for the work I'm doing I feel like them getting me at $75 an hour is a steal

daring marlin
#

If u dont mind me asking

modest geyser
#

Im so sad i have to code because i cant play hypixel skyblock because maintenance

daring marlin
glass silo
#

What if you code your own hypixel skyblock and play that

floral rapids
#

Uncle Matt, would it be possible to know what your opinion is, as an IT/CTO, when it comes to simply and easily teach someone under you? as in, in a way, how exactly am I supposed to teach them what is what for this exact project, how to further enhance functions/classes and how exactly they are supposed to handle new projects

daring marlin
modest geyser
modest geyser
#

No i will not play osrs

floral rapids
modest geyser
floral rapids
#

honestly, been playing it while coding, though only on the first map, the rest I had to literally take a shower due to how much I was sweating

patent carbon
floral rapids
modest geyser
daring marlin
#

Yh this server isnt meant for me

#

Yall are geniuses not to glaze a fact

patent carbon
#

ATM10TSK > hypixel

daring marlin
#

Yall UNCS

patent carbon
#

We all knew nothing at one point

daring marlin
patent carbon
#

Like actually start coding? Like 19

proud locust
#

Ww

daring marlin
daring marlin
#

I dont wanna say my age cuz of discord AI…. But am young

patent carbon
daring marlin
#

And made a fully functional 102 discord bot command

onyx viper
#

Is this a AI friendly server?

floral rapids
daring marlin
#

My bot i made it within 2 weeks

floral rapids
#

Doing projects is ❤️

modest geyser
#

No

dark moth
# onyx viper Is this a AI friendly server?

depends on how you define it. we hold people accountable for what they post. don't care if its ai generated or self written: garbage and misinformation is still garbage and misinformation

also just keep in mind that generally ai is bad at making discord bots and if people wanted to talk to an ai they would have opened an ai chat instead of discord

daring marlin
#

Mb

night shadow
daring marlin
dark moth
onyx viper
trim geode
# floral rapids Uncle Matt, would it be possible to know what your opinion is, as an IT/CTO, whe...

This is a lot of words for what comes down to the simple question of "how do you mentor somebody in the workplace?" And the answer is: It's different for everybody. You could approach it in the tell show do apply strategy where you tell the mentee what to do, show them how to do it, let them do it and apply that knowledge to their day-to-day lifestyle or there's other strategies depending on what exactly it is so like if in the software development space you could always do the pair programming and literally just take a ticket off the backlog. Work it together and just be in the same call or the same desk or wherever it is together and work through that together. And for them, the expectation is that they will think out loud, they will kind of document their entire process so you as the mentor can help guide and correct it when that thought process or that logic kind of goes off course or in a direction you don't feel is viable.

Now I know for me when I was first starting at a previous job in an environment that I really had no idea and hell it was my first corporate job so I didn't even know like what the corporate expectations were. Different products in a couple of different ways just very small things that could be completed in a single day and while they weren't actually useful for anything it helped give him a baseline to know where I was at thus far and then from there he was able to kind of guide me through some of the more specific systems and help provide me documentation so that I could do discovery on my own as needed to complete the job and do discovery on my own. And that's the best way I learned and eventually took over support for the couple years I was there because for me, the best way to kind of help learning all these systems was to actually dive into the deep end and support it.

daring marlin
modest geyser
#

Is this okay

dark moth
# onyx viper How about a AI simulation game?

if you mean discussing how to make one that's fine. just keep in that just like any other dev topic some devs are gona be more or less interested. so depending on who is around they might wana engage with it or not

trim geode
#

My developer policy 21 sense is tingling

dark moth
#

ai is a tool, we are not blanket banning it here. and plenty of discussion has happened regarding its use, both positive and negative

daring marlin
#

This server is what i was messing i hope ion get banned lemme read rules💀💔

dark moth
#

but we have had issues in the past with people just copy pasting questions from chat, and replying with whatever their ai spits out. that isn't welcome here at all. as its generally wrong and unhelpful

modest geyser
#

There have been a few scams today

floral rapids
#

thanks for also sharing your own experience too!

floral rapids
daring wasp
modest geyser
slate cosmos
#

Is this in VR? If so what kind?

floral rapids
#

I'd like to confirm the number but currently monitoring my dog

onyx viper
#

@slate cosmos you like to try?

#

I'll send you an invite to my server

trim geode
# trim geode This is a lot of words for what comes down to the simple question of "how do you...

Funny enough when working with corporate I think the biggest challenge I had was writing emails and I still think it's the biggest challenge I have today because I can be extremely wordy for one and then I can get extremely technical for two so when I was working in some of these jobs and this was before AI really existed or existed like it does today. One of essentially the product owners who was always willing to give me feedback on my emails to help me become a better writer of emails. And it very much did.

I would often find myself in a situation where I would need to write out some sort of email to an end user and I would spend 15-20 minutes writing out a super technical email that could explain away any question they would ever have and explains everything in depth and great detail so that they understand exactly what it is how it's structured, how it works etc.

Then I would send that email to that person and he would immediately pull me over and say to the extent of "yeah those three paragraphs can go and then you're good". That had to be the most humbling thing because it taught me how to really tailor my emails in particular to the end user and really pointed out some of the issues that I had in my own communication style and it was especially humbling considering I took 15 to 20 minutes to write an email that could have been written in five.

slate cosmos
floral rapids
floral rapids
#

nice

slate cosmos
# onyx viper Android and PC

Which version/Android port is this specced for? The current devkit for Q3 under app support is Oreo ||I was wrong it’s back to|| Eureka 14.

#

It’s a little bit too finicky if an app is based on marshmallow.

hard heron
#

Hi, i opened differents ticket on discord support but they get instant closed by CX Zendesk Integrations Service Account can someone help me?

trim geode
#

I hate how applicable that show can be 😭

trim geode
slate cosmos
trim geode
slate cosmos
#

Damn, things have changed a lot. KEKW I had a partner server liaison who also moderated the town hall.

upbeat anchor
trim geode
#

That has never changed AFAIK, Town Hall has never been able to provide live support for people needing actual support.

trim geode
upbeat anchor
#

still not enough spamm, its hard to actualy see any live updating :(

slate cosmos
#

Anyway, back to apps and code, apologies. KEKW

olive depot
#

What name styling font are you even using, or am i trippin

slate cosmos
#

Who what when where how why huh? Concern

olive depot
#

You, font, now, discord, you tell

slate cosmos
#

I’m not using a font. It’s default.

olive depot
#

maybe effect then hmm

slate cosmos
#

Discord’s proprietary font GG Sans unless they changed it again.

#

Nope, just standard GG Sans, the default.

Maybe tripping. I’m now tempted to find or upload the old Discord Whitney font and copy paste it though.

cunning coyote
#

who dare summon me from my slumber

patent carbon
#

The breakfast bagels did

#

Go have a salted butter bagel and coffee

slate cosmos
#

The chicken burrito.

#

Boba tea was also calling your name.

slate cosmos
#

I don’t even have options for fonts.

daring wasp
#

@vestal fractal By the way type[C] won't work for this reason

#

because then you're passing the type (not something callable)

trim geode
#

I thought I was in dev chat this whole time sobbing

#

I was distracted and didn't notice

neat olive
slate cosmos
slate cosmos
#

It can get stressful.

olive depot
#

Sora isn't dum anymore?

slate cosmos
#

I’ve gotta ask though @daring wasp, what keyboard is that? I’d rather not lug around a physical but keyboards like that are few and far between. Kekw_Cry

daring wasp
#

namely you have to enable all the function keys and insert and delete

daring wasp
#

I'll go sleep now

#

im tired

upbeat anchor
#

👁️

peak halo
#

Kind of... expected

upbeat anchor
#

stacking users are cool too

late pewter
#

guys how do w get the badge of devc

orchid ocean
late pewter
#

ooohh mb

hot oracle
#

Can I build host dont buy vps?

late pewter
#

sorry u cant u need vds

hot oracle
#

Mogodt?

modest geyser
orchid ocean
modest geyser
#

You just have to have the machine on 24/7

hot oracle
orchid ocean
#

a discord bot?

#

bruv

hot oracle
hot oracle
orchid ocean
#

u dont need port forwarding

vocal ice
#

Why want we say one word sentences???

orchid ocean
#

i mean if u use javascirpt

modest geyser
orchid ocean
#

u can do python

hot oracle
orchid ocean
#

with ur bot token

#

with the discord library

haughty grail
hot oracle
orchid ocean
#

u dont know python

#

???

hot oracle
orchid ocean
#

Discord bot in python is SUPER easy

upbeat anchor
hot oracle
#

only
65% for tools

orchid ocean
#

ill send u a tutorial

#

its just one script one py file

hot oracle
orchid ocean
#

the discord library is very easy yes

#

👉 Try Junie, smart coding agent: https://jb.gg/try-junie
Download PyCharm and use it for free forever with one month of Pro included: https://www.jetbrains.com/pycharm/

In this video, I'll be showing you
how to build a custom discord bot using Python. This isn't super complicated. It's going to be relatively fast, and we're going to do this...

▶ Play video
hot oracle
orchid ocean
#

u dont need to be megamind at coding

hot oracle
ember pollen
orchid ocean
#

no

#

im not arabic

trim geode
#

holy ai generated image

orchid ocean
#

the link is expired btw

ember pollen
hot oracle
orchid ocean
#

is anyone here interested in gamedev/

ember pollen
trim geode
orchid ocean
hot oracle
peak halo
#

Using prefix commands is already a red flag

hot oracle
#

How its 3ribe?

orchid ocean
#

i mean i sent him the first thing

peak halo
#

Well if you don't have any, better to not send anything rather than outdated things

ember pollen
orchid ocean
#

and dude thinks putting an if statement for each swear word for censoring would be a great idea instead of using an array

hot oracle
#

Bro why it’s deleted program dev targeted

orchid ocean
hot oracle
ember pollen
#

I can't understand a single line you write

orchid ocean
#

fr

topaz knot
#

how to remove hs badge?

forest totem
topaz knot
rugged vector
#

u cannot remove

topaz knot
#

bruh

fallen forum
topaz knot
#

i remove it thanks for helping

rugged vector
#

how did u- whatever

patent carbon
#

selfbotting

sullen needle
#

..

dense radish
#

chat got boomed

blissful otter
#

def think they should have a tester channel/server, would do great for what im doing rn

patent carbon
#

ehhh... a place to get testers would be filled with spam or possibly scams... this place is too big and too public

olive depot
blissful otter
#

them to test

olive depot
#

Lmao

blissful otter
#

by them i dont just mean mods or staff, regular users too

patent carbon
#

ya... not really the server for that...

rugged vector
#

test what?

blissful otter
#

im just surprised thats generally not a thing

olive depot
#

No one would like to test a random bot really

blissful otter
#

test bots and their functionality

olive depot
rugged vector
#

like ace said, why would anyone want to test a random bot?

patent carbon
blissful otter
patent carbon
olive depot
grave garden
#

ive seen servers that invite a bunch of new bots and it turns into a mess

limpid warren
#

J

blissful otter
olive depot
patent carbon
blissful otter
#

like reaching 1k server could be an easy requirement beforehand

limpid warren
#

Why is this

olive depot
blissful otter
#

listen, it wont be perfect, but that doesnt mean its not worth a shot

patent carbon
#

and a bot in 1000 servers doesnt need testers anymore... it's already made and released

#

the concept is already made

limpid warren
#

Im making roblox game lf scripters modelers and builder and animators

rugged vector
#

yeah, since discord doesnt allow u to reach 1000 without verify

blissful otter
#

nah, my bot is in 2k server and def needs some testing just to find things i wont see but someone else could

limpid warren
#

Oh

rugged vector
limpid warren
olive depot
#

Afaik, verification is optional, isn't it?

patent carbon
blissful otter
#

what???

grave garden
#

verification is not optional, your bot can't be in >100 servers without verifying

rugged vector
blissful otter
#

u cant join server without verification, what u can do is verify without intents but whats the point if thats the case lol

spring hollow
#

i have verified bots that don't require priviledged intents

blissful otter
#

1k server narrows down "joke" bots vs "serious" ones

olive depot
rugged vector
patent carbon
grave garden
#

it's just... known

flat shell
#

bruh, is their a dev posting for python on how to make a discord bot?

olive depot
#

Hmm fine

grave garden
#

source: me

spring hollow
#

@daring girder no

flat shell
patent carbon
#

yall... it's really important to make this one clear VERIFICATION is the check mark.... INTENT REQUESTS is the form that takes several weeks (and is optional)

patent carbon
#

there is no new dev badge

rugged vector
grave garden
#

verifying is not a form

patent carbon
#

anyone with a valid identification

blissful otter
grave garden
#

intents verification they do not accept everyone

deft birch
#

without intents our bot can't join more than 100 servers so intent is important

blissful otter
#

wrong

patent carbon
rugged vector
blissful otter
deft birch
viscid steppe
grave garden
patent carbon
#

verification has nothing to do with the intents

spiral haven
#

How can I create a feature like this for my own Discord server?

grave garden
#

verification != intents

patent carbon
rugged vector
#

just for asking, does discord bot accounts considered as assett and cannot sell it right?

patent carbon
#

you cannot sell any account, bot or user

verbal wraith
#

Technically yes

runic axle
patent carbon
#

it is a legal asset... so you can have a bot owned by a company... and you can sell or aquire the company

spiral haven
spiral haven
rugged vector
olive depot
patent carbon
#

it's not a measure of who... it's a measure of "how"

grave garden
#

big companies cannot buy bots. big companies can buy the business behind a bot, and then the team can be transferred to them.

#

anyone can buy a business behind a bot

patent carbon
#

^

grave garden
#

not just big businesses

stiff peak
grave garden
#

(this is not legal advice, this is just my interpretation of the ToS)

rugged vector
#

well, only thing i understand bot account is nothing and if any company wants to buy they usually buy the code behind it

verbal wraith
#

Discord Lawyers

grave garden
#

hey gotta cover myself ya know

olive depot
verbal wraith
#

You are lucky

patent carbon
#

ya and there's no TOS for or against buying and selling bot code.. it's just an API client

teal schooner
runic axle
#

@verbal wraith ur profile is very tidy from colors or other

verbal wraith
#

I don't even know what that means but thanks

patent carbon
#

it's pretty cluttered... hard to read the text (not that i can read it anyways)

runic axle
patent carbon
#

you better say "Earth"

embrace the bit

olive depot
#

I found him on earth

verbal wraith
#

I thought I'm from germany but earth sounds good too

runic axle
spiral haven
olive depot
olive depot
#

Someone/you need to screen share and watch it for that i guess

upbeat anchor
spiral haven
#

i want to show activity like this if user join stage

olive depot
#

Stage should be live for it, not just audio

patent carbon
#

youll also likely have better help with running a server in discord.gg/discord-townhall

as this is off topic for this server and has nothing to do with development

rugged vector
olive depot
#

if user join stage

rugged vector
#

oh, i didnt see it

dense radish
#

Your reply has been saved for translation

slate cosmos
floral rapids
slate cosmos
#

Either way, appreciated. Saw it’s open sourced so maybe I could implement it into VR architecture.

upbeat anchor
#

well user update too prob

vestal fractal
sacred wren
#

cool server guys 🥹

floral rapids
sinful geyser
#

e

upbeat anchor
#

if you update a role, then thats its own event

floral rapids
#

uhh i need remove role not add

#

but hmm 🤔

upbeat anchor
#

well yeah also

floral rapids
#

self-add or?

upbeat anchor
#

if you update/delete/add an emoji, then its base guild update

upbeat anchor
floral rapids
#

does it work when another user adds or only self

#

i see

upbeat anchor
#

i only tested myself adding

#

but i can't see why it would be that harsh

#

(what is your usecase btw 👀)

floral rapids
#

it's for one of the projects i'm working on, where, if a user purchases a temp role, if the role gets deleted or the user loses it / gets banned, they get back what they spent on it (since it's a temp role)

#

i can see a lot of issues (e.g bot goes down, they get kicked/leave/banned), and a few things too but yeah

#

it's a bit of a fraud prevention (since i hate this)

upbeat anchor
#

ohhh yeah you only get events targeting your bot without the intent

floral rapids
#

it can become useful somewhere

upbeat anchor
#

bot goes down
this guys is why you should save the reconnect url+token so you can replay missed data (idk how long it lasts for) - do note that if you rely on caching from initial connection, this doesn't work well (but you could maybe kinda make a skuffed way)

floral rapids
upbeat anchor
#

fair

floral rapids
#

plus i have an already redis based cache

#
import { version } from "ioredis/package.json"
import { time } from "@rjweb/utils"
import { Redis } from "ioredis"

import logger from "@/global/logger"
import env from "@/global/env"

const startTime = performance.now()
const localCache = new Map<string, any>()
const redis = new Redis(env.REDIS_URL, {
    keyPrefix: "application::cache::"
})

redis.once("connect", () => {
    logger()
        .text("Cache", (c) => c.yellow)
        .text(`(${version}) Connection established!`)
        .text(`(${(performance.now() - startTime).toFixed(1)}ms)`, (c) => c.gray)
        .info()
})

export default Object.assign(redis, {
    async use<Run extends () => Promise<any> | any>(key: string, run: Run, expire: number = time(3).s()): Promise<Awaited<ReturnType<Run>>> {
        const mapResult = localCache.get(key)
        if (mapResult) return mapResult

        const redisResult = await redis.get(key)
        if (redisResult) return JSON.parse(redisResult)

        const runResult = await Promise.resolve(run())
        if (!expire) await redis.set(key, JSON.stringify(runResult))
        else if (expire >= time(1).m()) await redis.set(key, JSON.stringify(runResult), "EX", Math.ceil(expire / 1000))
        else {
            localCache.set(key, runResult)
            setTimeout(() => {
                localCache.delete(key)
            }, expire)
        }
        return runResult
    },
    local: {
        use<Run extends () => any>(key: string, run: Run, expire: number = time(3).s()): ReturnType<Run> {
            const mapResult = localCache.get(key)
            if (mapResult) return mapResult

            const runResult = run()
            localCache.set(key, runResult)

            if (!!expire) setTimeout(() => {
                localCache.delete(key)
            }, expire)

            return runResult
        }
    } as const
})
``` ~~may or may not have stolen it from someone~~
trim geode
#

we flaunting cache now? hold pls

floral rapids
#

i don't want java code on my screen today pls

trim geode
#
package cache

import (
    "context"
    "encoding/json"
    "errors"
    "fmt"
    "time"

    "github.com/hashicorp/golang-lru/v2/expirable"
    "github.com/redis/go-redis/v9"
    "xxx/internal/config"
)

type Cache struct {
    redis *redis.Client
    lru   *expirable.LRU[string, []byte]
}

func New(
    ctx context.Context,
    cfg *config.Config,
) (*Cache, error) {
    opt, err := redis.ParseURL(cfg.Dragonfly.Url)

    if err != nil {
        return nil, fmt.Errorf(
            "failed to parse redis url for cache: %w",
            err,
        )
    }

    redisClient := redis.NewClient(opt)

    if err := redisClient.Ping(ctx).Err(); err != nil {
        return nil, fmt.Errorf(
            "failed to connect to dragonfly: %w",
            err,
        )
    }

    return &Cache{
        redis: redisClient,
        lru: expirable.NewLRU[string, []byte](
            cfg.Cache.L1Size,
            nil,
            cfg.Cache.L1TTL,
        ),
    }, nil
}

func (c *Cache) Close() error {
    return c.redis.Close()
}

var ErrCacheMiss = errors.New("cache miss")

func (c *Cache) Get(
    ctx context.Context,
    key string,
    output any,
) error {
    if val, ok := c.lru.Get(key); ok {
        if err := json.Unmarshal(
            val,
            output,
        ); err != nil {
            return fmt.Errorf(
                "failed to unmarshal LRU cache: %w",
                err,
            )
        }

        return nil
    }

    val, err := c.redis.Get(
        ctx,
        key,
    ).Bytes()

    if errors.Is(
        err,
        redis.Nil,
    ) {
        return ErrCacheMiss
    }

    if err != nil {
        return fmt.Errorf(
            "failed to get redis cache: %w",
            err,
        )
    }

    c.lru.Add(
        key,
        val,
    )

    if err := json.Unmarshal(
        val,
        output,
    ); err != nil {
        return fmt.Errorf(
            "failed to unmarshal redis cache: %w",
            err,
        )
    }

    return nil
}

func (c *Cache) Set(
    ctx context.Context,
    key string,
    value any,
    ttl time.Duration,
) ([]byte, error) {
    data, err := json.Marshal(value)

    if err != nil {
        return nil, fmt.Errorf(
            "failed to marshal set value: %w",
            err,
        )
    }

    if err := c.redis.Set(
        ctx,
        key,
        data,
        ttl,
    ).Err(); err != nil {
        return nil, fmt.Errorf(
            "failed to set redis cache: %w",
            err,
        )
    }

    c.lru.Add(
        key,
        data,
    )

    return data, nil
}

func (c *Cache) Delete(
    ctx context.Context,
    key string,
) error {
    c.lru.Remove(key)

    if err := c.redis.Del(
        ctx,
        key,
    ).Err(); err != nil {
        return fmt.Errorf(
            "failed to delete redis cache: %w",
            err,
        )
    }

    return nil
}

func (c *Cache) GetOrSet(
    ctx context.Context,
    key string,
    loader func(ctx context.Context) (any, error),
    ttl time.Duration,
    output any,
) error {
    err := c.Get(
        ctx,
        key,
        output,
    )

    if err == nil {
        return nil
    }

    if !errors.Is(
        err,
        ErrCacheMiss,
    ) {
        return err
    }

    result, err := loader(ctx)

    if err != nil {
        return fmt.Errorf(
            "failed to run loader function: %w",
            err,
        )
    }

    data, err := c.Set(
        ctx,
        key,
        result,
        ttl,
    )

    if err != nil {
        return fmt.Errorf(
            "failed to set cache: %w",
            err,
        )
    }

    if err := json.Unmarshal(
        data,
        output,
    ); err != nil {
        return fmt.Errorf(
            "failed to unmarshal cache: %w",
            err,
        )
    }

    return nil
}
floral rapids
#

how come i summoned 2 people when i said java

patent carbon
#

new Client().withCaching(true)

floral rapids
trim geode
#

Mine is a hacked together 2 tier cache.

#

probably scuffed AF

patent carbon
floral rapids
#

yeah i read go after reading a bit

grave garden
#

go mention PogU

trim geode
upbeat anchor
#

you guys want rust code?

trim geode
#

no

floral rapids
#

i have rust code

upbeat anchor
patent carbon
#
    if err := json.Unmarshal(
        data,
        output,
    ); err != nil {
        return fmt.Errorf(
            "failed to unmarshal cache: %w",
            err,
        )
    }

i have mixed feelings about this syntax... but mostly just because i always forget how to write it cuz i dont use it 90% of the time

floral rapids
#
use super::CacheService;
use crate::handler::error::AppError;
use async_trait::async_trait;
use redis;

pub struct InRedisCache {
    client: redis::Client,
}

impl InRedisCache {
    pub fn new(url: &str) -> Result<Self, AppError> {
        let client = redis::Client::open(url).map_err(|e| AppError::Cache(e.to_string()))?;
        Ok(Self { client })
    }
}

#[async_trait]
impl CacheService for InRedisCache {
    async fn increment(&self, key: &str) -> Result<i64, AppError> {
        let mut conn = self
            .client
            .get_multiplexed_async_connection()
            .await
            .map_err(|e| AppError::Cache(e.to_string()))?;
        redis::cmd("INCR")
            .arg(key)
            .query_async(&mut conn)
            .await
            .map_err(|e| AppError::Cache(e.to_string()))
    }

    async fn expire(&self, key: &str, ttl: u64) -> Result<(), AppError> {
        let mut conn = self
            .client
            .get_multiplexed_async_connection()
            .await
            .map_err(|e| AppError::Cache(e.to_string()))?;
        redis::cmd("EXPIRE")
            .arg(key)
            .arg(ttl)
            .query_async(&mut conn)
            .await
            .map_err(|e| AppError::Cache(e.to_string()))
    }
}
trim geode
#

I'd rather have iron oxide code

floral rapids
#
use super::CacheService;
use crate::handler::error::AppError;
use async_trait::async_trait;
use std::collections::BTreeMap;
use std::sync::Mutex;

pub struct InMemoryCache {
    counters: Mutex<BTreeMap<String, i64>>,
}

impl InMemoryCache {
    pub fn new() -> Self {
        Self {
            counters: Mutex::new(BTreeMap::new()),
        }
    }
}

#[async_trait]
impl CacheService for InMemoryCache {
    async fn increment(&self, key: &str) -> Result<i64, AppError> {
        let mut counters = self.counters.lock().unwrap();
        let val = counters.entry(key.to_string()).or_insert(0);
        *val += 1;
        Ok(*val)
    }

    async fn expire(&self, _key: &str, _ttl: u64) -> Result<(), AppError> {
        Ok(())
    }
}
#
pub mod in_memory;
pub mod in_redis;

use crate::handler::error::AppError;
use async_trait::async_trait;

#[async_trait]
pub trait CacheService: Send + Sync {
    async fn increment(&self, key: &str) -> Result<i64, AppError>;
    async fn expire(&self, key: &str, ttl_seconds: u64) -> Result<(), AppError>;
}
``` enjoy
upbeat anchor
patent carbon
#

it's memory safe

floral rapids
trim geode
lethal pier
#

is this flex hour?

quiet saddle
#

someone said caches?

upbeat anchor
eternal oyster
solemn crane
#

heyhey

floral rapids
#

i only did a mockdata project with rust

upbeat anchor
quiet saddle
#
export const MISS = Symbol.for("CACHE_MISS");

export type Miss = typeof MISS;

export type CacheResult<T> = T | Miss;

export interface CachePolicy<K, V> {
    get: (key: K) => CacheResult<V>;
    set: (key: K, value: V) => void;
    delete: (key: K) => boolean;
    has: (key: K) => boolean;
    clear: () => void;
    size: () => number;
}

export type CachePolicyFactory = <V>(
    maxSize: number
) => CachePolicy<string, V>;

type EvictionStrategy = "LRU" | "MRU";

interface Entry<V> {
    key: string;
    value: V;
    prev: Entry<V>;
    next: Entry<V>;
}

class LinkedCache<V> implements CachePolicy<string, V> {
    private readonly maxSize: number;
    private readonly store: Map<string, Entry<V>>;
    private readonly head: Entry<V>;
    private readonly evictionStrategy: EvictionStrategy;

    public constructor(
        maxSize: number,
        evictionStrategy: EvictionStrategy
    ) {
        if (!Number.isInteger(maxSize) || maxSize < 1) {
            throw new RangeError("maxSize must be a positive integer");
        }

        this.maxSize = maxSize;
        this.store = new Map();
        this.evictionStrategy = evictionStrategy;

        const sentinel = {
            key: "",
            value: undefined as unknown as V
        } as Entry<V>;

        sentinel.prev = sentinel;
        sentinel.next = sentinel;

        this.head = sentinel;
    }

    public get(
        key: string
    ): CacheResult<V> {
        const entry = this.store.get(key);
        if (!entry) {
            return MISS;
        }
        this.unlink(entry);
        this.spliceAtTail(entry);   
        return entry.value;
    }

    public set(
        key: string,
        value: V
    ): void {
        const existing = this.store.get(key);
        if (existing) {
            existing.value = value;
            this.unlink(existing);
            this.spliceAtTail(existing);
        }

        if (this.store.size >= this.maxSize) {
            const evict = this.evictionStrategy === "LRU"
                ? this.head.next
                : this.head.prev;
            
            if (evict !== this.head) {
                this.unlink(evict);
                this.store.delete(evict.key);
            }
        }

        const entry: Entry<V> = {
            key,
            value,
            prev: this.head,
            next: this.head
        };

        this.spliceAtTail(entry);
        this.store.set(key, entry);
    }

    public delete(
        key: string
    ): boolean {
        const entry = this.store.get(key);
        if (!entry) {
            return false;
        }
        this.unlink(entry);
        return this.store.delete(key);
    }

    public has(
        key: string
    ): boolean {
        return this.store.has(key);
    }

    public clear(): void {
        this.store.clear();
        this.head.prev = this.head;
        this.head.next = this.head;
    }

    public size(): number {
        return this.store.size;
    }

    private unlink(
        entry: Entry<V>
    ): void {
        entry.prev.next = entry.next;
        entry.next.prev = entry.prev;
    }

    private spliceAtTail(
        entry: Entry<V>
    ): void {
        entry.prev = this.head.prev;
        entry.next = this.head;
        entry.prev.next = entry;
        entry.next.prev = entry;
    }
}
trim geode
#

okay madeline

patent carbon
#

AHHH typescript flashbang!

trim geode
#

just flexing on us

lethal pier
#

im glad Im not on mobile right now

upbeat anchor
# upbeat anchor fair ~~and same~~

im just under opionion that you only should bother with rust if you need that peak perf... and as a result may as well make use of everything it can do (that node can't as easily)

patent carbon
#

huh... and none of this commits crimes against type delcarations

eternal oyster
#

I am on mobile

dark moth
solemn crane
#

for joe

trim geode
#

Can we just have a thread for flexing code snippets? thanks

eternal oyster
#

Meh

patent carbon
#

gotta be careful because theres an automod rule that flags code / json as a false positive

floral rapids
#

let me see if i have it somewhere sec

#

it's super old code though, 4+ years

upbeat anchor
#

you guys are overcomplicating everything

patent carbon
#

ya that's what my caches look like

floral rapids
#

nvm, i have one still in typescript

dark moth
upbeat anchor
#

LOL

patent carbon
#

caching is just wasting ram anyways

trim geode
floral rapids
upbeat anchor
floral rapids
#

make a worker

eternal oyster
quiet saddle
#

for the example I shared I'm mostly using it to cache function results

grave garden
#

why are you not sending it off to a $4k/mo service from aws?! where's the elasticache ?! :p

trim geode
#

Bro, I just dropped $700 on an ipad setup for this business sobbing after spending 3.8k for IT ops, and another 1.1k for uSecure sobbing

upbeat anchor
floral rapids
#

not really but

trim geode
#

my spending this month is gonna be higgghhhh

floral rapids
#

"make a worker!!"

trim geode
#

Especially because I need 9 more of those ipad.

patent carbon
#

why do you need 10 ipads as an independant contractor?

trim geode
upbeat anchor
#

now guys, who uses redis via unix socket (like me)

trim geode
eternal oyster
#

Pic I took a couple days ago before going home

#

That's a screen, not a projection

patent carbon
floral rapids
upbeat anchor
#

r2 cache 🗣️

trim geode
patent carbon
upbeat anchor
trim geode
#

Golang

#

GoLand default

patent carbon
upbeat anchor
patent carbon
#

wait... so is GET

floral rapids
#

wanted to send mine, but, i just noticed that i updated the package so i'll need to restart typescript

trim geode
upbeat anchor
#

it pulles in so much of its own impl for really old node compat i assume

trim geode
floral rapids
#

think this is old version, but still used in prod

floral rapids
#

i had to hack my way in a way so that cf r2 works

patent carbon
#

just use the Bun version (i have no idea if there's a bun version)

floral rapids
#

honestly speaking i cba remaking, it works

floral rapids
#

im not going to touch code that works atm

glass vortex
trim geode
upbeat anchor
#

i have no idea what that means

trim geode
#

oh lucky you...

random root
#

damn one of my vpses got suspended earlier 😭

#

because of a 400gbps incoming ddos??

patent carbon
#

oh... so a small DDOS

upbeat anchor
#

what if i just dont want 300kb (when minified) of code just to do a few http reqs

trim geode
#

The TLDR is that he is of the idea that we should be having compatibility with some of the oldest node versions because there are still a percentage of production deployments that are on node 12 for example. And I think one of his personal philosophies is that because there are still deployments out there with node 0.4, that we should still support node 0.4 in our libraries.

random root
#

provider refusing to unsuspend it..

upbeat anchor
#

let me guess bro is the only user of cjs now

#

like esm only libs >>>>>

trim geode
#

So when he took over the Traverse library, he increased its size by a crap ton because he decided that for future proofing it should have compatibility layers across the board which just so happened to include 90% of the new dependencies being his own packages.

upbeat anchor
trim geode
#

Which some people suspect is a way to get more money because he increases his download size by a crap ton as well. Because if the Traverse package which may get for example 20 million downloads installs this other package of his then that package also gets 20 million downloads. So now he has 40 million downloads added to his install count per month.

upbeat anchor
#

very fire

trim geode
#

for context...

upbeat anchor
#

i broke bundlephobia

trim geode
#

prior to harb btw

upbeat anchor
#

...

#

why does it not support esm

#

this sounds like the simplest lib ever

trim geode
upbeat anchor
#

modern one not any better tho

floral rapids
floral rapids
#

thanks

trim geode
upbeat anchor
trim geode
#

neotraverse is worse, but different I believe? Would have to look

weak dragon
#

loodi ste

trim geode
#

it used to be tiny...but for some reason is even bigger now

upbeat anchor
#

omw to make node v0.1 support

trim geode
#

"dependency count" simply isn't an objectively bad number to have increase; that's just left-pad style small package FUD. If something malicious happens with any dependency, you simply replace it.

This aged like fine wine btw.

upbeat anchor
#

yeahhh

#

the hacking of npm deps have really gotten bad recently

trim geode
#

That wasn't even that long ago...it was july 2024...

upbeat anchor
#

Major releases contribute to much higher bundle sizes, via duplication.
oh so he does care

#

anyway

#

ram usage be cool

trim geode
#

yeahh, people like him are (IMO) whats wrong with that landscape and actively hold it back

upbeat anchor
#

@trim geode btw have you seen this error before?

trim geode
#

I'm sorry but there is no reason people should be on anything at the minimum lower than like 14 or even at the max 12 at this point...and if you're on something that low you should have zero expectation of support from modern libs

upbeat anchor
trim geode
#

So you can't just mass ban people who aren't even in the guild

upbeat anchor
#

i wonder, is it still ip ban tho

trim geode
#

Shrug that I do not know

upbeat anchor
#

like imagine being able to wipe out like all ips

trim geode
#

omg these comments are getting better reading them now.

upbeat anchor
#

sooo do you think its a per server ratelimit (or cap)... or the bot itself ratelimit

trim geode
#

Surface area of a supply chain attack comes from the number of publishers in your graph, not the number of dependencies. You'll find that the vast majority of the dependencies everyone's so concerned about have a single publisher.

trim geode
upbeat anchor
#

a very strong one to not be 429 too

trim geode
#

Shrug im just guessing

upbeat anchor
#

i mean ive gotten you are opening dms too fast type thing too

#

not recently :(

trim geode
#

Open an API issue if you can't find any documentation about it

upbeat anchor
#

it is on api docs

#

wow there are alot of ratelimity ones that are full on errors

serene wind
#

are these good specs for a bot vps for less than 5$ ?

Processor: 2 vCore
Main memory: 2 GB
Hard disk: 60 GB SSD
Network traffic: 100MB/s
Interface Speed: 1 GBit/s
Local Block Storage: No, not expandable with Local Block Storage```
quiet saddle
# glass vortex Why does your spliceAtTail splice at head? 🤔

Apologies, the naming does make things a big ambiguous.

The cache is a doubly linked list, but instead of having separate sentinel nodes at the "head" and the "tail" of the list, I just use a single sentinel between the newest entry in the list and the oldest entry in the list, which makes it circular.

So, splicing at the tail adds an entry to the "back" of the linked list (head.prev).

When the cache capacity is reached, if the cache policy is set to LRU, head.next (the oldest entry) is evicted; if the policy is MRU, head.prev (newest) is evicted

upbeat anchor
#

doubly linked list
:bigbrain:

trim geode
#

And what the actual cost is..for $5 it could be bad...but for $2.5 it could be good

neat olive
#

that is a capital B Thonk but yeah

#

honestly though that doesn't seem all that bad for $5

trim geode
#

But it depends on the task because it could just be an IPv6 server and they could be using for Discord bots which require an IPv4.

upbeat anchor
#

github and discord both don't know what ipv6 is

serene wind
trim geode
#

That's a loaded question because heavy caching could mean anything.

patent carbon
#

depends on the member and guild count... and if youre caching messages

#

at least for discord side caching... then any other caching outside of discord

trim geode
#

I mean, are we caching a million servers worth of data? Then absolutely not!

patent carbon
trim geode
# serene wind for scaling

Scaling is also a loaded term because scaling could mean from one guild joined to 100 guilds or scaling could mean from 10,000 guilds to 1 million guilds.

verbal wraith
#

Just get 64GB just to be sure

tight mural
neat olive
#

you're just throwing a number out with zero basis on reality

patent carbon
trim geode
neat olive
verbal wraith
#

That's too expensive in this economy

trim geode
#

I have 128 GB lmao

patent carbon
#

for your hosting server or personal pc?

trim geode
#

Server

neat olive
verbal wraith
neat olive
#

we might as well assume they can afford a datacenter or two clueless

serene wind
serene wind
bitter mesa
#

I haven’t talked in forever here but I just need confirmation that mass delete ion thing is fake because some people are claiming it is real I know it’s fake

patent carbon
patent carbon
bitter mesa
neat olive
#

Thonk I was assuming they didn't need global coverage since the api is in one region, but maybe they're dealing with voice

bitter mesa
#

And copypasta

patent carbon
bitter mesa
#

Ok thank you

patent carbon
#

the only official messages come from the Discord SYSTEM dm

serene wind
neat olive
serene wind
solemn crane
#

one way

patent carbon
#

one way?

solemn crane
#

one to compute that

patent carbon
#

compute what?

solemn crane
#

nvm lol

#

talking about the memory a few messages up

sudden yoke
patent carbon
#

ohhh, i c

serene wind
neat olive
#

for how long?

solemn crane
#

the dev bots cool who coded that one us or discord

neat olive
#

that could easily amount to a massive amount of cached data esp. counting in attachments

serene wind
#

but the rest is kept

#

so old cache is replaced with new every 15 min

#

for messages and attachements to be clear

patent carbon
#

members and messages are really the only 2 that significantly effect memory usage... the rest are both less dynamic (as they often dont change) and are negligible amounts of data itself... like even massive servers will only have tiny amount of data for that

upbeat anchor
#

servers and roles and all can add up tho

#

like with just guilds and guild messages intent, my bot got to 1.5gb really quickly (and stablised at it, so i know its capping messages to a degree)

#

i think it was when it was in 4k or smth servers

hardy yew
#

x

sudden yoke
solar lance
#

Hi chat, I just made my first Discord bot :D, anyone want to test it?

frank goblet
solar lance
frank goblet
solar lance
solar lance
#

Legal fact: it was only supposed to be a bot for my server

#

But I liked him very much.

serene wind
teal schooner
#

chat what do we think abt google I/O shi

teal schooner
serene wind
teal schooner
frank goblet
sudden yoke
# solar lance Legal fact: it was only supposed to be a bot for my server

I see.. i see..

I had made this project in the past.
It's called TameTail and is kinde just a simple RPG minigame system but people did suggest adding gambling related items such as crates and premium coins (for real cash).

I kinde stopped with its development though, had a busy month.. and ended up just forgetting itIdk

teal schooner
#

like members across servers

sudden yoke
teal schooner
sudden yoke
serene wind
sudden yoke
solar lance
sudden yoke
teal schooner
serene wind
teal schooner
#

im currently working on a bot that has basically all features from bleed (a paid discord bot) but making it mainly free with either a premium tier or donations i havent figured that out yet

sudden yoke
solar lance
#

ok

sudden yoke
teal schooner
sudden yoke
teal schooner
sudden yoke
#

Ah, alr

teal schooner
#

well its mainly in testing phase for now so sometimes its self hosted but will prob hosted on a vps when i publish

sudden yoke
#

All my (active) bots run on my own server.
Just an regular Proliant DL360 gen 9

teal schooner
#

especially cuz my bot's latency will prob be over 200 if i self host

sudden yoke
#

Anything I do particularly runs on that thing and I have yet to go above 5% CPU usage

teal schooner
#

its pretty fast imo but once i get from 150-200 then its very bad

spring hollow
#

150-200ms isn't that bad

teal schooner
sudden yoke
#

I run an avg of about 90~120

spring hollow
#

not really

teal schooner
#

well actually 70-100

sudden yoke
# teal schooner same

I do it all on just one cable atm.
JellyFin, Ollama, AMP, web page (Nginx LXC), bots, Adguard, etc

#

An ping of 90~120 ain't badTakanePopcorn

sudden yoke
#

I mean, my server has two cables plugged in but one is for my ILO and one is for the server to use

teal schooner
#

what abt electricity costs? how much do u pay per month

sudden yoke
#

I got 8 ports total.
4 are from a NIC I got with it, do plan to swap it for a GPU

teal schooner
#

or like how much does the server use per month

sudden yoke
teal schooner
sudden yoke
#

Yep

teal schooner
#

im contemplating getting one now

sudden yoke
#

It has two 800 watt PSU's, redundant

sudden yoke
#

It will stay low unless if it needs to

teal schooner
#

uhhh is my bot on smth lol

sudden yoke
loud lintel
#

Hey guys, I have a quick question about the Discord developer portal. When uploading a banner, it renders very blurry. How can I fix this, please?

sudden yoke
upbeat anchor
dark moth
sudden yoke
#

What..

teal schooner
teal schooner
sudden yoke
#

Spamm, probably

dark moth
#

usually 30-60s is enough but yeah

#

it'll fix itself

quick geyser
#

How long does it take to verify the bot?

teal schooner
#

stop trying to send it

sudden yoke
teal schooner
trim geode
sudden yoke
topaz egret
#

if you're starting off a nuc can actually be pretty good

sudden yoke
teal schooner
topaz egret
#

i run my network on a windows server instance with dhcp and dns, but I don't have a proper server

#

I don't need one

sudden yoke
#

Mainly did it for the processing power, simple 48 cores

topaz egret
#

I don't do much cpu accelerated

sudden yoke
topaz egret
sudden yoke
topaz egret
#

is that pdm?

sudden yoke
sudden yoke
topaz egret
sudden yoke
#

Still good

topaz egret
#

yeah

#

I can't be bothered upgrading

sudden yoke
#

No real need to update it, 9.1.1 runs fine

topaz egret
#

i have no complaints for how proxmox runs

#

and tbh proxmox is VERY cheap for IT people (and even the general community)

sudden yoke
topaz egret
sudden yoke
#

Have allot of them off rn, I only turn them on when needed

topaz egret
#

unlike vmware who charge a premium per core

topaz egret
sudden yoke
topaz egret
#

I'm considering trying it out

sudden yoke
#

Or a web page

topaz egret
#

yeah

sudden yoke
#

Or Ollama, you say it and it can

topaz egret
#

might run my pxe server on it

sudden yoke
#

Wait, let me check something

topaz egret
#

as that's currently running in a ubuntu vm that uses less than a gig of mem

sudden yoke
topaz egret
#

aha they have a netboot.xyz image

sudden yoke
topaz egret
sudden yoke
topaz egret
#

do they use as much ram

sudden yoke
cunning plume
#

EVERY single feature is now officially documented with docs, in-discord help, youtube videos. If people can't figure it out after uploading 26+ videos and painstakingly editing them. Then I quit lol

sudden yoke
topaz egret
#

24 is still quite good

sudden yoke
#

26.04 goes till 2039 with pro enabled

neat olive
#

it's 5 (normal)+5 (pro)+2 (legacy)

sudden yoke
#

Btw @teal schooner this is what ot looks like, just sits on my desk.

Plan to either mount it under my desk (with the rails) or buy a small rack

neat olive
#

(and 24.04, as the name implies, was released in April of 2024)

sudden yoke
sudden yoke
#

Just pulling numbers

#

I am bad at math

trim geode
#

Fiverr exists

#

This is not a recruitment server.

sudden yoke
#

This ain't the place for this..

unreal plaza
trim geode
#

not sure where you got that, but someone is lying to you.

meager topaz
#

Help

sudden yoke
unreal plaza
#

Kk

meager topaz
#

Hello, I’m a friend of a user whose account has just been suspended for excessive links. He is the owner of the server, and nobody else has access to the administrative roles, which means he is losing control of the server. We urgently need help.

trim geode
#

!support

strong sealBOT
#

This server is for help with Discord APIs, SDK and other various integrations. For general support, please contact Discord at https://dis.gd/contact, or send us a message on Twitter at @discord_support

topaz egret
#

Make a support ticket.

trim geode
#

We're not support, we can't help, no one here works for support.

sudden yoke
#

Fast Matt as alwaysIdk

meager topaz
#

But it won't let me log in from support.

trim geode
meager topaz
sudden yoke
#

Damn

meager topaz
#

I want to know, has this ever happened to you? Because I think I've just lost my community.

trim geode
#

Ok no one here can help bro

meager topaz
#

And on the other server?

trim geode
#

There is zero form of live chat support that is offered for Discord in any capacity outside of the support portal.

blissful otter
# patent carbon you need to be verified to apply (just to avoid spam) but it's still completely ...

doesnt change the fact that u need to verify first. <100 servers, u have all access with no credibility, ur assumed small and or purpose made. >100 requires verification, but not everyone requires all or certain intents, so you verify those separately. And if memory serves, u have to verify urself and have 2FA on. Which is why the idea of testing applications is not far fetched.

My idea was more to allow users to invite with the sole purpose of testing it. Or go to the developer or dedicated server to use and test whatever. This server or whomever simple will create a trusted bridge to accomplish that.

strong heron
trim geode