#We're making a wrapper over the Discord API using Java!!
1 messages Β· Page 5 of 1
i just found this https://github.com/javadiscord/java-discord-api/pull/148
wow
public class ExampleSlashCommand {
@SlashCommand(
name = "quiz", description = "A fun Java quiz", options = {
@CommandOption(
name = "q1", description = "What is an Integer?", type = CommandOptionType.STRING
),
@CommandOption(
name = "q2", description = "What package is List in?", type = CommandOptionType.STRING
),
@CommandOption(
name = "q3", description = "What does JVM stand for?", type = CommandOptionType.STRING
),
@CommandOption(
name = "q4", description = "Is a String a primitive?", type = CommandOptionType.STRING
),
}
)
public void handle(SlashCommandEvent event) {
// TODO: Logic to handle the slash command
}
}
oh its draft yes
π€
wazei is doing some many pr
Not sure if using annotations is a good solution
it is fully optional
One thing that you may want to do instead
is to compile time check the argument and only provide what is possible
contrary to what jda is doing
I feel like the @CommandOption's should be on a paramter
not method yk
well discuss that on github please
He updated the example
I think parameter might be too hard because a slash command can have many options and branches
The example is so long lol
It's so good! The work everyone here has done on the annotation stuff is really unique and pretty to code with
I'm really supporting this projects "no boilerplate" approach!
I'm not as experienced with all the black magic that's being written but I don't think it's possible with the dynamic parameters that they are doing
Unless your write a annotation processor, which maven/gradle runs before your application is built
Annotations have compile time check already I thought
bc you have to specify the fields in the code
I have never worked with annotations before
They do? even for value validaton?
validation*
Data type validation
Ala won't be happy about this
Ohh yea he isn't lol
?
u aren't happy with all that annotations is what i said
Yea
how do i test the api? like local setup @oak flare
you mean like running an example bot?
the project include one
put your bot token and you are good to go
or you mean like really testing
ohh
smhow i completely missed the example project
lmao
17:40:16.106 [vert.x-eventloop-thread-0] WARN com.javadiscord.jdi.internal.gateway.handlers.events.EventCodecHandler - Unknown event received PRESENCE_UPDATE
17:40:32.209 [vert.x-eventloop-thread-0] ERROR io.vertx.core.impl.ContextImpl - Unhandled exception
java.lang.NullPointerException: Cannot invoke "com.javadiscord.jdi.core.models.guild.Guild.id()" because "guild" is null
at com.javadiscord.jdi.core.Guild.<init>(Guild.java:32) ~[core-1.0.0.jar:?]
at com.javadiscord.jdi.core.GatewayEventListener.getGuild(GatewayEventListener.java:67) ~[core-1.0.0.jar:?]
at com.javadiscord.jdi.core.GatewayEventListenerAnnotations.receive(GatewayEventListenerAnnotations.java:243) ~[core-1.0.0.jar:?]
at com.javadiscord.jdi.internal.gateway.handlers.events.EventCodecHandler.lambda$handle$0(EventCodecHandler.java:266) ~[gateway-1.0.0.jar:?]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) ~[?:?]
at com.javadiscord.jdi.internal.gateway.handlers.events.EventCodecHandler.handle(EventCodecHandler.java:266) ~[gateway-1.0.0.jar:?]
at com.javadiscord.jdi.internal.gateway.WebSocketHandler.handleMessage(WebSocketHandler.java:76) ~[gateway-1.0.0.jar:?]
make a github issue or smth
didnt test the new code
so it might not be working for me as well
and be a code issue
Hmmm
let me test real quick
lmk
after i send a message in the channel
everything worked fine with default code
how do u run the bot
just like any main method
ohh u clicky click the hexagon in ur ide's gui goo
how do you run it? lol
u do ./gradlew run in project root?
yep
idk wait i'll retry
uh no
my bot is in 2 server and its only worky for 1 of em
me neither
@oak flare also have we thought anything about event listiners with a constructor?
wdym exactly?
ah well idk
but we should give the user the ability to create some factory implementation
also worth an issue
that'll be too much bolier plate for this project vision
currently it only uses zero arg constructor
i think we should get rid of @EventListiner
yea thats what i wanted to test
i also saw that code today
what is the alternative?
this
and then?
handle each even listener annotation separately
ys
i'll try implementing that
well I think we should maybe provide both approaches?
make an issue first
yea so wazei can write his opinion
well everyone

such an important design decision should be discussed
works for mee x
On both servers?
ya
@oak flare can u try
im eating rn
when is wazei back?
huh it doesnt work for me as well
but I get different error
15:38:46.094 [vert.x-eventloop-thread-0] INFO com.javadiscord.jdi.internal.gateway.WebSocketManager - Connected to Discord
15:38:46.400 [vert.x-eventloop-thread-0] ERROR io.vertx.core.net.impl.ConnectionBase - Max frame length of 65536 has been exceeded.
15:38:46.421 [vert.x-eventloop-thread-0] ERROR io.vertx.core.net.impl.ConnectionBase - Connection was closed
15:38:46.421 [vert.x-eventloop-thread-0] WARN com.javadiscord.jdi.internal.gateway.WebSocketHandler - The web socket connection to discord was closed. You will no longer receive gateway events.
as soon as the bot is on two server
and completely works fine again after removing from one of the server
I think you need some proper sharding setup for multiple server
well not sure tbh 
sharding seems to have a different purpose
wazei taught us what sharding is
either here or somewhere else but 1 shard = 1 web socket connection
but you dont need one websocket for each server right?
never
nope
it is working for me :S
how is ur setup
just make a github issue bro
well if it works on her setup we might be able to narrow down the problem more, and have more info on the issue to work with
didn't work
yeah but then discuss in the issue, you most likely wont include all details what have been tried etc
and in this case it doesnt work for both of us with different errors lol
still didn't work
I went afk hehe
lmk if its online again
no when i try to invite it gives me this
Oh
i dont know how to make a bot
what exactly?
when i try invite it to a server i get the error lilcoder gets
as said I wouldnt be surprised if thats a code issue
so please make an issue on github
its not a code issue because i can't invite the bot to my server
the issue wants a reproduction steps
so you cant invite? why are you saying you get the same error as taz?
if i make my own bot and invite to my own server everything is working
if somebody else makes a bot and I invite it to my own server I get the code grant error
ok
nice
Bababooie
What about the intents ?
I checked and it's a second optional parameter on discord class
Maybe all intents are set by default
@oak flare can you help
Whats up with this project
Its had some activity, I think wazei still contribs a little
it's in a somewhat working state
Interesting
I'll revive this soon now that i'm back

Thanks 
has this project been developed ?
It's still got some outstanding work
Check out the board for things to pick up: https://github.com/orgs/javadiscord/projects/1
@light loom we use AtomicBoolean in the DiscordRequestDispatcher, but I think volatile should be enough in this case
this video actually kinda displays the same example:
https://youtu.be/WH5UvQJizH0?si=mVa9Hytjo6oQJbEV
does volatile provide performance gains though?
and we dont do any compare and set
so volatile should just be fine
All the operations are thread safe on AtomicBoolean and I think it's more "safer" than using volatile. The reason I say safety is because I've had problems in the past with volatile which sometimes causes values to not been seen. I guess PTSD really
yeah sounds like PTSD to me lmao
@oak flare there are some available tickets if you want to start with them
I beleive we're kinda done but just need to test and make sure we're not missing anything
then document the code
and we're ready for maven
hm ok
I would really appreciate if the testing could be the focus though because I really really wanna publish to maven
A good way is to write bots, add them to the :examples and see how it feels
This is a really good start because we have the least amount of boilerplate here possible
I did a comparison with python and it was really close to the "smallest" possible code to write an echo bot
Which honestly is super impressive and goes to show how all our contributions and efforts have great weight in comparison to other frameworks
Soon
void main() {
new Discord().start();
}```
Is a possibility because of the language enhancements
hm its hard for me to write the tests without background tbh
it talks about this right? com.javadiscord.jdi.core.api.ApplicationRequest
but where can I find it in the discord api docs?
So each thing is named after the resource in discord
This relates to: https://discord.com/developers/docs/resources/application
I see
yeah probably
if we're missing anything then create tickets
coluld also be referring to: https://discord.com/developers/docs/resources/application-role-connection-metadata
but I think it's the first one
ok now I need to find out how to properly write integration tests π΅βπ«
follow the existing examples
yeah going to check older prs
going to come back if I need help
when you commit any channels you reference; use 1242792813700055134L as the ID
i mean test locally in your own but change to ^ after
i can give u my creds
and access to the GHA server
ah wait i cant
GH doesnt expose secrets
all good
I am just not sure how to properly test
like what do I test in a simple get request?
that it just succeeds?
yeah and just check the result is expected in your discord server
@Test
void testCreateInvite() throws InterruptedException {
CountDownLatch latch = new CountDownLatch(1);
long testChannelId = 1242792813700055134L;
AsyncResponse<Invite> asyncResponse = guild.channel().createInvite(testChannelId, 10000, 10, true);
asyncResponse.onSuccess(res -> {
assertEquals(10000, res.maxAge());
assertEquals(10, res.maxUses());
assertTrue(res.temporary());
assertNotNull(res.code());
latch.countDown();
});
asyncResponse.onError(Assertions::fail);
assertTrue(latch.await(30, TimeUnit.SECONDS));
}
for example this test
well wouldnt it be different depending on bot token?
but also manually make sure the "thing" happened in discord
mmm not sure
just give full perms
ty btw 
np
but like I get an Application object with a bunch of fields, do I even check these fields?
like if we check this test:
@Test
void testGetUser() throws InterruptedException {
long wazeiUserId = 821143476455342120L;
CountDownLatch countDownLatch = new CountDownLatch(1);
AsyncResponse<User> asyncResponse = guild.user().getUser(wazeiUserId);
asyncResponse.onSuccess(
user -> {
assertEquals(wazeiUserId, user.id());
assertEquals("wazei", user.displayName());
assertEquals("0", user.discriminator());
assertFalse(user.bot());
countDownLatch.countDown();
});
asyncResponse.onError(Assertions::fail);
assertTrue(countDownLatch.await(30, TimeUnit.SECONDS));
}
what if you change your username?
the test would fail
this seems like a major problem with testing this
we start to assume things
also I see you using CountDownLatch everywhere, I think at this point it might make sense to make a wrapper around AsyncResponse that got the logic for it
also code like this:
AsyncResponse<Void> response = ...; // #1
response.onSuccess(...);
response.onError(...);
couldnt this fail if technically the call #1 executes fast enough to be before the onSuccess/onError calls and thus they get ignored?
this probably wont happen 99.99% of the time
but this is kinda assuming stuff again
bc its a unit test and async doesnt work, has to be blocking
yeah ur right its a problem
yeah I wasnt asking why, I was saying that it might make sense to create a wrapper for it
i mean sure feel free - the main goal is to ensure everything works so how its done is up to you
yeah true, though there is probably more important stuff currently
yeah - i just don't want us shipping a broken product
frankly, other discord libraries have little to no tests! shocking
with more important stuff I was kinda referring to this lm,ao
damn
no wonder why they are ass lmao
yeah
but its just hard to test tbh
its hard that's right but once we've done it - we can without doubt say "our discord framework is the best"
because we have test evidence
then tell me how to come up with testing that fixes this issue :)
create a discord account specific for the tests π
yeah I thought about that 
but like overall, what about deleting a channel?
you would want to have the same environment before and after testing
yeah so a delete channel test = create first (using the API) and then run delete
so do you setup the server using the tests like creating a channel, store the id and then delete later?
this would assume that the create endpoint works without problems 
i only do some manual setup but if we can we can setup the environment within the test itself
so we start testing by using our own implementations
im not that deep into testing, so I cant really tell shit
the tests are allowed to be bad
lol
as long as its "testing"
and what about this?
can you elaborate
it wouldn't happen
let me test it hang on
is assertTrue legal in @BeforeAll?
a bit weird ig
basically what LiveDiscordHelper is doing
all good, just trying to get familiar with the code base
it was a simple way to reduce duplication and to focus more on testing
and kinda got confused about the LiveDiscordHelper
yeah its just used to start the server π
"Live" meaning - using the real discord server
assertTrue(STARTUP_LATCH.await(30, TimeUnit.SECONDS)); in factr
this probably isnt needed
STARTUP_LATCH.await(30, TimeUnit.SECONDS) just this is fine
also is this even going to work?
asyncResponse.onError(Assertions::fail);
its going to run on a different thread
not sure if junit got support for that
seems weird nonetheless
also what do we do with endpoints that have optional parameters like ApplicationRequest#editCurrentApplication?
it currently doesnt really support that
yeah it works
we have a builder as the parameter π
maybe a mistake ;o
how would something like that look like? you got any other example cases?
maybe like ChannelRequest#createMessage?
yeah
i'll go through it all with you tomorrow because it's 11pm here and bed time π but try get started and do what's best. keep tab on these questions because it's hard for me to answer your questions with the limited access I have to the code
all good, just going to try on my own for today and you can then give feedback on the pr :D
thanks β€οΈ
@light loom do we have a functional way to define commands?
As opposed to annotations
Yea I think so
Welcome back wazeii
can't tell whether this is good or bad
it looks unclean but this design makes it portable π
It doesn't look unclean at all
We could save 1 extra line by doing new Discord(...).start();
It completes well for "smallest echo bot"
And competes well against the JS/python libraries for reduces boilerplate, that is an accomplishment for a java based lib
Actually you don't need to even have a main class π
If you use the provided one π
wdym
In gradle mainClass = "com.javadiscord.Main"
Instead of creating your own
I'm trying to find some time to finish the project because we're really close
Then I can publish the first alpha version onto maven!
i didn't read the convo, but bro just called wazei's code unclean π
is there a alpha roadmap or jjust current features are sufficient?
I'll break it down - I'll create a table of the feature we support and compare it to the website, expect me to create a pretty table linking the API feature to lines of code
ok I just really don't like new Discord().start() it never made sense to me
?
whyy
is it because there's no token provided? is it the syntax? whattt
if you don't give a token, it'll grab it from env vars
otherwise, it'll call discord and create a bot automatically!!
joking at the last bit :p
but that would be a cool feature π
nah it was my inner python xd
our code is better than python :3
i checked what python looks like
it's more ugly once you start getting deep into it
then answer my pr comment :)
ah i didn't realize u replied sorry
updated lel
not sure if you get my question
What exactly should I test?
each of the API method calls that we do
as for the default state
yeah, sorry, but what is the default state
and assuming some default fields is just bad
honestly, i have no idea how to approach that - do whatever you think works for the test itself
i know i know
we would need to make some setup and cleanup state, but what if these fail, then we end up in a broken state that we would need to fix manually
yeah pre-commit fails on every test so i'm kinda OK with the "it works on my machine" approach for now

there's a bigger issue with long rate limits
for some endpoints you can only do like 5 requests per week
or something
bruh what
at the least we should use these tests as a way of proving manual verification
we just need something/somebody to run through the work and check, does it at least work
we can always better the testing approach later
i think stuff like changing your name
damn
it's a pain to test discords API
a really big pain
and it's probably the reason nobody has done it
because they're bad
π
but us...
we are experts
im not
you are good enough
at least an expert on this project
like you can follow the code and know where everything is
it'll be so nice β€οΈ
do it! i have a lot of code I can share
I started working on it but forgot to fork the repo so i couldn't push
bruh I have no idea how to do this testing shit
like there is no value at all if I add assertions like this:
assertEquals(1240663319203811329L, res.id());
assertEquals("TestBot", res.name());
assertEquals("This is a bot to test the java discord api wrapper.", res.description());
assertNull(res.tags());
its going to fail for your bot
that's okay - at the least it works right?
it's like manually verifiying and using the junit test as the evidence
well thats what onSuccess already tells me
good good, looks correct, we've deserialised the response correctly
and to get the correct response, the request needed to have been correct
so overall, 
assertNull(res.tags()); besides this one, not sure if it should be null?
yeah thats what the simple onSuccess check is telling me, but these field checks are worthless
it is in the response
Application[id=1240663319203811329, name=TestBot, icon=null, description=This is a bot to test the java discord api wrapper., rpcOrigins=null, botPublic=true, botRequireCodeGrant=false, bot=User[id=1240663319203811329, username=TestBot, discriminator=2314, displayName=null, avatar=null, bot=true, system=false, mfaEnabled=false, banner=null, accentColor=0, locale=null, verified=false, email=null, flags=0, premiumType=null, publicFlags=0, avatarDecoration=null], termsOfServiceUrl=null, privacyPolicyUrl=null, owner=User[id=565887697269293066, username=squidxtv, discriminator=0, displayName=SquidXTV, avatar=77a4cb1ba1de4b24d8ec77fbe1ad82e5, bot=false, system=false, mfaEnabled=false, banner=null, accentColor=922250, locale=null, verified=false, email=null, flags=256, premiumType=null, publicFlags=256, avatarDecoration=null], verifyKey=144b5ed922052918556af0bc4990f788579c9cfdd1d5b625104e5690a9a70e9a, guildId=null, guild=null, primarySkuId=null, slug=null, coverImage=null, flags=565248, approximateGuildCount=1, redirectUris=[], interactionsEndpointUrl=null, roleConnectionsVerificationUrl=null, tags=null, installParams=ApplicationInstallParams[scopes=[applications.commands, bot], permission=633318697598975], customInstallUrl=null]
I guess the ? means it can be null
yeah i think so or optional/sometimes
problem is they use partial objects π¦
they sucky for that
well
wym
its an optional field
and not nullable
but could it be that our json parsing automatically makes it null?
if its not in the response
then we have the same shit for two different cases
in both cases it will be null
though in one its an optional field
and in the other its actually null
hm not really
it gets interesting if a field is actually optional and nullable field
the user cant know if the object is actually null or just wasnt in the response
is there a usecase for this information?
there might be
JDA doesn't give you that, it's null by default
jda is ass though
yeah it is
π¦
okay let me think on it
can always update the test once I come to a conclusion
and it's good because when we do implement it that check/changes, our tests will fail in the correct spots
an example would be the Channel Resource
what if the user of our library uses the get channel endpoint and then
wants to do something based on three different scenarios:
- name wasnt included in the raw json (optional)
- name is actually null
- name exists
it wont be able to do that because 1) and 2) look like the same in theChannelobject
hmm
You know it! Just write a comment so we know what you're doing 
I was experimenting with the framework because I needed to make a command and I couldn't create forms because we forgot to do the impl
or somebody can implement it's available for now
Hey, is this project alive?
not using slf4j? I have been disappointed
Hey yes, feel free to look through the issues!
it's an example..
I still don't like the way commands are
they feel WAYY to much code for them
Let's improve it
The bit that feels verbose is the annotations part for commands but the regular method is fine
Is there a way to search threads
hm, it'll be one of the actions we created
It's been a little while since I've looked at the codebase, my memory is a little foggy at the moment
I meant in discord
but i found it!
π
congratulations
i tried to join but wasn't lucky
i hope i come in part 2
You can jump in at anytime
what can i do
The project board is helpful here. Just choose 1 and someone will assign you
alright
we only have 26 tickets left to be done from the looks of it
(given we don't raise more
)
there are a couple that I think could be handled in 1 PR
Discover the power of gen AI in boosting developer productivity and innovation. Through in-depth demos, we'll showcase how to use gen AI to enhance developer productivity across the software development lifecycle. Youβll also learn how to easily build production-grade gen AI applications using Google Cloud technologies and your favorite ecosyste...
reckon gemini could finish our framework? 
this piece of shit AI
bruh
i have no idea how to feed it the codebase
well this one guy apparently condensed his entire repo into a single text file
https://medium.com/@zmandel/how-to-analyze-large-codebases-using-gemini-1-5-pro-8e9bf3542720
bruh thats cringe lol
it sucks - i tried it and it was giving me half baked ass π¦
Why does Google confidently lie to us π¦
"Hey this product is awesome, it's the best in the market and can do all these innovative features trust me bro"
the product: 
@light loomcan we tag the repo with hacktoberfest?
@light loom Would you accept a PR to migrate off vertx?
either to a more lightweight (jar size) websocket client or to java's?
If it can be done native in Java that would be good!
https://github.com/TooTallNate/Java-WebSocket what about this? ~157KB
Eh sure
Ok one more thing, what are your thoughts about refractoring the WebSocketManager to just like GatewayWebSocket, I think it would make sense since Java-WebSocket favors inheritence for creating the client but I'm not sure if that's an antipattern
nvm*
nice
you done it already!?
oh no you're using the search wrong
use "In Project" not "Directory"
Yes
I searched from the root directory because I was editing the gradle
great job|!
Is Discord#start supposed to block?
no
so the echo bot is supposed to just exit?
this is your impl that's not blocking
if you run it on main, it'll block
sorry not block but keep a thread alive
https://github.com/javadiscord/java-discord-api/pull/175 @light loom PR opened
Changes look good
Have you tested the edge cases like disconnecting and reconnecting your internet?
Also, look into the sonar issues, dw about pre-commit
is there really no functional interface for this in the standard lib?
I couldnt find nay
whoops forgot to format
I did not
yeah same, looked it up and people said the only one would be Runnable, but it shouldnt be used in this case
damn
Don't listen to them, if a runnable fits, it's fine
javadocs doesnt say anything
yeah then use Runnable ig
it probably said something else back in the days
You can check by looking at the docs from an older version
Good stuff, somebody at oracle was like "guys let's not be idiots" ππ
yeah literally lol
@light loom Did we not handle any other frames besides close frame before?
14:10:48.243 [WebSocketConnectReadThread-68] WARN com.javadiscord.jdi.internal.gateway.handlers.events.EventCodecHandler - Unknown event received PRESENCE_UPDATE
Ooh maybe we didn't
before all it checked was Close Frame
NVM* why did I think this was frames
this is unreleated to websocket we are just missing a couple of events
Ah
Ok I think last thing to do here is just sonarcloud
any idea what im supposed to do here?
public void stop() {
if (client != null && !client.isClosed()) {
try {
client.closeBlocking();
} catch (InterruptedException e) {
Either re-interrupt this method or rethrow the "InterruptedException" that can be caught here.
LOGGER.error("Failed to close websocket client: {}", e.getMessage());
}
}
Basically,
Thread.currentThread(). interrupt();
Or something
yeah how should I rethrow the exception? I rethrew it as a runtime exception and still sonar complained
oh
I dont have context
but throw e; is what sonar refers to when saying
Either re-interrupt this method or rethrow ...
oh
this gets called in like 4 places, 1 being a non user facing lambad
this probably makes more sense
π
api tests failed, logs doesnt say which one and api doesnt even depend on gateway how did that break
π
no idea but the API tests are weird/bad imo anyways, they do real api calls which can easily break
iirc we used imposter before to do them but not anymore. It was never that much help to have the tests there
Is there a way to get it to show which test failed wtihout changing workflow:
oh im blind af
@light loom These integration tests are weird
@Test
void testGetUser() throws InterruptedException {
long wazeiUserId = 821143476455342120L;
CountDownLatch countDownLatch = new CountDownLatch(1);
AsyncResponse<User> asyncResponse = guild.user().getUser(wazeiUserId);
asyncResponse.onSuccess(
user -> {
assertEquals(wazeiUserId, user.id());
assertEquals("wazei", user.displayName());
assertEquals("0", user.discriminator());
assertFalse(user.bot());
countDownLatch.countDown();
});
asyncResponse.onError(Assertions::fail);
assertTrue(countDownLatch.await(30, TimeUnit.SECONDS));
}
there must be a better way to do this
yeah thats why I stopped on my PR about tests
these tests are just bad, they require a pre state in a different environment
but I got no idea what to do about it
thats probably why other discord libraries got no tests
yeah
im gonna comment out this test for now since I dont think it should block this PR to have integration tests reworked
alright workflow passing now
Yeah Tests are flakey
Don't worry too much about them
I'm not actually sure why the tests are flakey, like is there something we're doing wrong?
It's lame that in the GHA we don't see logs because they often run perfectly fine locally 
The pasts wonβt pass for me on localhost because Iβm not the bot token
that's okay, did you test?
Until we through some remote tester and anyone can run tests there it wonβt work fell
the dc stuff
Like the gateway?
yeah
Yes
all good? π
Sweet
squid are u able to put a review on it so it can get merged?
requires 2 reqviewers π
it seems popular
why use async response when completable future
anyways when can I use this lib for production
I wanna connect my cool bot to my cool server
you kinda can already I think
but there is no guarantee that everything works
and its pretty likely actually that some parts like deserializing/serializing has 1-2 issues
Websocket breaks rn
Due to missing values in enum my pr foxes but I havenβt had to time to finish it
Ah i thought itβs just a lib change
It was but Websocket was throwing exceptions while handling important events received
So I fixed them in that too
Discord added new onboarding things to the guild feature enum
It's not that it's dead or unnoticed
Just a time problem, I knew there was some events not being handled, it was just a matter on when we do it
I think I did go brain-dead at one point and saw issues but never thought about raising them
is this project dead ?
uh kinda since wazei left
no one is stopping us from keep going though
just no one having the effort at the moment
Who owns the project in general lol
Or are there github collaborators
Right you can just make a fork
but doenst really matter who owns the repo
you can also just work on the original repo
because me and others have access
ah
(though ofc as an outsider you need to make a fork and then pr before being part of the org/repo)
I would be open giving that project some love tbh
biggest problems are writing tests sadly
Why?
Tbh JDA is the go-to framework for discord bots in java/kotlin but even that is not the best tbh
they run against an actual discord bot, which requires a server
now tests should be isolated and repeatable which is hard in that case
like a test changing the name of a channel
but after that it should also reset it back, so its isolated and repeatable
but now imagine something breaks in the test
the reset doesnt happen and the discord server for testing is in a broken state
that means the testing framework you guys are using is either not being utilized properly or isn't good enough
or you guys are throwing exceptions like it's popcorn at the chicken jockey scene inside of a cinema
I sadly don't have any idea how to design proper tests for this though
or we go the jda route and just dont test 
ig they actually do have tests π€
4000+ posts, have you started yet?
How about when Discord pulls the rug and disable api for third party?
Yes
.
We started to test but they werenβt very meaningful and broke somewhat often
We werenβt testing against discord api just a stub
Every single bot will break including tj bot
Is this project done regardless of tests?
no
YAS
Usually I notice they pull certain sections of api out first (those they can monetize based on third party popularity!)
like what? I don't think they have really pulled anything out the api. They have added some features that bots are popular for to discord but i dont think they've removed much from the api
THEY in the general sense of X, Reddit, facebook, etc not Discord explicitly. Just the trend to let the community find the happy path to monetization then attempt to try to take it over.
Amazon is a good example, study sales data then launch competing products with their sellers as well as priority product placement to take arbitrage.
Ah
hii can i help something???
@oak flare
why not you use mocking? instead of interacting with real discord api
you can use mockito
iirc we did do some mocking for requests
we used the discord openai spec with smth
hello !
do you think really that this new framework is going to be the alternative to JDA and others ?
yeah, jda is pretty shit, but this can only work if people put in their effort which isnt really the case
I see
I think we can do it
but first of all, i need like a recap about what has been done so far and what is missing
to reach a first release
anybody with great knowledge about this project can help
otherwise, i'll have to explore it by myself
it sounds like wazei wanted us to be in this situation to learn lol
but the Projects board should give some indication of whats missing