#dev-general
1 messages · Page 105 of 1
the only compuslory subjects i have is english
and maths is kinda like, you should do it or you will fail
lucky you tbh
not here
this year i have to do science, History, maths, english, Religion,
@static zealot can probably confirm
@distant sun at some point you don't want to have programming in school though
ye I'm sure
since like it'll be boring as shit and most teacher suck at it
they don
't follow the conventions
or make clean code
ngl, learning like this is probably much more entertaining than school
like the other shit we are forced to learn are better @frigid badge
and all use very old stuff
It is Frosty
But can you operate a cnc
id rather spend 11 hours a week learning fucking php than doing modules (specialization classes)
modules?
that's how they are called here
what should I confirm?
that the world is fucked
wait all your subjects are compulsory?
@static zealot
well I am the confirmation
Still waiting for @onyx loom to drop a nuke
or a nude at least 😢
thats an oof
you can go on 3 or 4 profiles
Lmao Gaby
that have 2-3 different subjects
but yeah
for example because I went where I went I only had art and music until 10th grade
yep
😡
well
you can drop out
if you want ..
xD
so all are optional
just you do them all or none of them
in my country you technically can't even drop out lol
you are forced to get a degree
xD
:gear: Development General - Not configuration help - More relaxed area to discuss development topics Does that mean I can ask in here how do I give access to another IP to MySql? xD
no just to connect to it
the server connects to a router
well idk how mysql works
the router connects to the isp and the isp gives the router an ip
...
xD
You are overexplaining that
that's the goal
@static zealot do you want a user to be able to connect from a specific IP?
it's underexplaining and overexplaining at the same time
well I want my plugins to be able to connect from my server
no u Gaby
but I changed the port of the server and now they can't
ew tho exposed mysql servers
yeah I have no idea how xD
it aint upnp
I have 0 knowledge about mysql
Thats not sql
I think I'll just ask my hosting company to do it for me xD
ufw allow {port}/tcp
maybe he uses iptables smh
but mysql is not on the same IP as my server? do I just allow the port?
Theres no reason to use anything besides ufw
@static zealot then only allow from the ip of your server
just add from {ip}
to the end of that
You should also probably change the mysql user to only allow from that ip as well
ufw allow {port}/tcp{ip}?
no
What the hell
ufw allow {port}/tcp from {ip}
I literally... told you exactly what to type
oh
How do you fuck that up
xD
overthinking
I just asked them to do it because I'll destroy everything and I rather do that on a test database xD
also I got this
what the hell is that??
Its not a mysql query
Thats a command, isnt it?
Just ask the provider to do it for you 🤷♂️
funny can we delete the last 50 messages? xD
well
you ask others to do it for you xD
I am trying my best to convert it back to .db files but 2 plugins of mine don't have a migration command or something like that
it was more of an experiment at first xD
I hate crumbs
@hot hull still waiting for papi 3 🙄
@obtuse gale give me what youre trying to deserialize
Like it says, its not a hash
Also that line 100% exists... lol
coolGenerator69: {
item: {
type: "STONE"
meta: {
name: "coolBlock69"
glowing: true
}
}
// How many Items should spawn per minute in each tier, in order of ascending tier
speedTiers: [5,10,15,20]
// How long until it should tier up from beginning of game
timeToTiers: [5,10,15,20]
locations: [
"420,69,420",
"410,69,420",
"400,69,420"
]
}``` I meant the line it was saying in my code lol
Please use a paste service to share configs, errors, code and long logs.
• HelpChat Paste
fun readGenerators(): Map<String, GeneratorData>? = korm.pull(df.resolve("$generatorsFile")).toHash()
lol
one sec
class GeneratorData(val item: Item, val speedTiers:List<Int>, val timeToTiers:List<Int>, val locations:List<String>) {
class Item(val type: String, val meta: Meta) {
class Meta(val name: String, val glowing: Boolean)
}
}```
same thing
Show me what you have
{
coolGenerator69: {
item: {
type: "STONE"
meta: {
name: "coolBlock69"
glowing: true
}
}
// How many Items should spawn per minute in each tier, in order of ascending tier
speedTiers: [5,10,15,20]
// How long until it should tier up from beginning of game
timeToTiers: [5,10,15,20]
locations: [
"420,69,420",
"410,69,420",
"400,69,420"
]
}
}```
Is that what you meant lol
yes lol
(Clean, then build again)
still getting it lol
Shut your whore mouth
What I just fixed has nothing to do with your issue
Send me the error youre getting
:kek:
For some reason the lexer was categorizing tab characters as symbols
[23:01:56 WARN]: Caused by: java.lang.IllegalStateException: This does not represent a hash
[23:01:56 WARN]: at com.sxtanna.korm.reader.KormReader$ReaderContext.internalToHash(KormReader.kt:294)
[23:01:56 WARN]: at org.aj3douglas.ajbedwars.utils.FileManager.readGenerators(FileManager.kt:37)
[23:01:56 WARN]: at org.aj3douglas.ajbedwars.core.GeneratorManager.createGenerators(GeneratorManager.kt:18)
[23:01:56 WARN]: at org.aj3douglas.ajbedwars.commands.Test.test(Test.kt:15)
[23:01:56 WARN]: ... 23 more```
Are you sure you updated the file?
indeed
The last version
lol whats that
Do you not use the packages plugin?
I dont believe so
Get it
whats it do
It can read dependencies from your build.gradle or pom.xml
and show you the metadata, the versions, and allows you to update them with the gui
yes
anyone know of a good API for writing Discord bots in Kotlin?
jda
okay
yeah I was thinking that
what about making commands though?
I was thinking JDA Utilities but the documentation is very vague
jda utilities is trash
terrible code last time I checked
I doubt a good command framework exists for jda
and for making music bots I should use lava player right?
yeah
matts lib seems nice
I use matt's
👀
oh if matt's lib has discord support, go for it
he has one for jda and one for mc
matt send us a link
he has a separate one for jda
separate, not abstracted?
yes
to github matt
yes
??
I know Piggy D:
why would you add jda commands framework on a mc plugin 
code one run everywhere though
I'll rewrite everything later to make it abstract though
gaby, the only difference there should be between the two separate frameworks, is the command listener, and the parameter type

https://github.com/ipsk/MattFrameworkJDA this one?
maybe
Harder maintenance Gaby
@jovial warren Yeah, though the link i sent you has the maven repo
where be yer wiki matey
no wiki yet
also, what's latest matt?
ping pong
=ping
• Replied in 98ms.
• API Ping is 37ms
1.1.9-BETA
https://img.bristermitten.me/15_06_20_16.02-38-.png getting better
copy java examples you find around the place into intellij
Also it's not exactly like ACF it has it's differences
that's good, you don't want to be exactly like acf, because acf is severely flawed
what's an fg brister?
Yeah, imo it's more customizable than acf as well
my language
Frigga
frigga
frigga
also, what is value supposed to be in the @Command annotation?
^^^
nice way of saying fucker
Frigga is not a Goddess
odin?
the name seemed appropriate
because idk about you Matt but value doesn't seem very contextual to me lol
Frigga was the Queen of Asgard and wife of Odin
sx's language
She's a witch
oh her lol
damn i might aswell make a language called god
lol
Djin will be ariving soon
You are not good at naming things...
no one is lol
christian god > ur norse gods
💀
Oh, you two married?
i mean if its called god, then maybe its the god of all gods 
LOL
lol
lol
@jovial warren Only one sad thing for Kotlin, you need to register the Int parameter type because it's different from Java
The command annotation is the command name for example @Command("test") for the test command, you can have more than one and it'll act as aliases
And the name value is needed so you don't have to specify the name, cuz Java
most of the time things just happen by accident and they end up working out very well
ah okay
have u never watched supernatural sx
Nope
other gods are like a snack to christian god
Christian god was written too op
Frigga could take christian god easily
no contest tbh
u clearly haven't seen supernatural
Supernatural is HERESY
okay now for this command, how do I get arguments?
just add it to the parameters
okay
fun test(argument1: String, argument2: Int) ;p
I just went to search supernatural, and this came up as a suggestion: https://superkotlin.com/
SuperKotlin is the website dedicated to the Kotlin language and its community. It contains tutorials, guides, reviews of libraries, interviews to developers.
I had to look up the definition of heresy because your vocabulary eludes me at the best of times
and heresy is the exact opposite of supernatural
can you annotate methods outside of classes in Kotlin?
Does supernatural not depict false gods?
a.k.a translating to do I even need a class to put this command in
You do yeah
no, there's no false gods in supernatural
can I take arguments as an array?
Yeah
okay
....
HERESY
!!!!!!!!!!
xD
so the name of the method is supposed to be the name of the command?
also, what about command aliases?
no
Let me show you a good example
// Prefix for ! command for `command` so !command
@Prefix("!")
@Command("command")
class YourCommand {
@Default
fun defaultCommand() {
// this method handles the call for !command
}
@SubCommand("test")
fun subCommand() {
// this method handles the call for !command test
}
}
ah okay
https://img.bristermitten.me/15_06_20_16.12-23-.png if only kotlin was dynamically typed 😭
Aliases are simple @Command("main", "alias") or @SubCommand("main", "Alias")
ah okay
someone really needs to make a good Kotlin Discord API at some point lol
like one actually written in Kotlin
ill do it np
there's not much benefit to having one
I thought about making one, but too much work
because interop
yeah but wouldn't it just make your life so much easier when writing in Kotlin KM
you can do that anyway?
JDA is perfectly fine from Kotlin?
there's very little benefit that the interop can't solve
apart from slightly more idiomatic use
yeah fair point I guess
now time to figure out how lava player works lol
a nice addon to JDA that makes kotlin more idiomatic would be nice
In regards to what?
coroutine support, maybe some DSLs and named arguments instead of builder patterns, etc
coroutines are not idiomatic to kotlin
That doesn't make them idiomatic
you know what I mean though
being able to use coroutines instead of JDAs things would be nicer
whatever the class is called
RestActions
can't you use coroutines anyway?
that's it
I mean... you can
or does JDA not allow you to use your own concurrency (and have it still work)
Theres very little need for coroutines
someone tell me how the hell I'm supposed to do something like https://github.com/sedmelluq/lavaplayer/blob/master/demo-jda/src/main/java/com/sedmelluq/discord/lavaplayer/demo/jda/Main.java in Kotlin
do I just have to have the main method in a class? because I don't think that's how Kotlin works
or do I create a separate class and call that
do it in an object or as a top level function
?????
the latter is preferable
My main is great fun main(args: Array<String>) = Kipp()
imagine using args in main
I couldn't get IJ to recognize it without it
Pretty sure it only supports it when its top level
anyone know any Kotlin alternatives to BlockingQueue<E>?
can you do that in Kotlin?
or a Next list
https://github.com/sedmelluq/lavaplayer/blob/master/demo-jda/src/main/java/com/sedmelluq/discord/lavaplayer/demo/jda/Main.java#L41 what about this? should this just be a field with a custom getter?
I'm trying to adapt it
long guildId = Long.parseLong(guild.getId()); disgusting
If only there was a method called getIdLong
but wait, IT IS
https://img.bristermitten.me/20-27-52-15-06-20.png which is better?
For shorter strings, second, otherwise first
I think first is better as well
i just clicked on some code
i wish i hadn't
I've managed to crash IntelliJ O_O
Step 1). Attempt to decompile the Material class...
lol. All I did was copy and past a constructor for decimal format
also @ocean quartz how do I post a response to the channel the command was sent in?
In the commandbase class you get access to the message method which is the message that was sent, so you can do message.textChannel and get the channel to reply back to it
https://img.bristermitten.me/00-35-44-16-06-20.png
pretty speedy
93 milliseconds?!?!??! @prisma wave
anyone experienced in PHP who could potentially help me with changing something up and reimplementing a function
alright
i asked in request free too, but basically i want to change the text you see in https://gyazo.com/11742c697ca44454d816b20a4bea8529 to something like https://gyazo.com/dba664adb72e44b6a1f8fc8d65e3f91c
so changing "Player' to "Banned Player:" and "Moderator" to "Banned By:"
which requires me to modify the info.php file (found here https://paste.helpch.at/tofevepazi.xml) and reimplement the function which returns all of the table data.
that's what the dev told me
The files are in the lang folder
lemme check out the english one tho
bruh you're right, the dev must have got confused smh
only issue tho
that makes it say banned by: for all types
even mutes, warnings etc
i'd rather have warned by: banned by: etc
Oh, youre looking at the individual punishment page
i'm looking at the lang file
No, thats not what Im talking about
Where it says "Moderator"
Its on an individual punishment
there's only one "moderator" tho
i think you might have an older version as https://gyazo.com/686b7247f3bb6c8728290f3d7f6b5f8b
is what i see
compared to generic.banned.by
wait nvm lol i read it wrong sh
smh
where would i edit individual punsihments then, so like banned by, warned by etc
You will have to change the info.php
If you want it to show those values, just change table.executor to the appropriate lang key
Yeah thought so
for each punishment type
uhh im a bit of a noob with php, could you help with that?
Its just a text file dude
so https://gyazo.com/846ff980b1d4bc3526c20476aff29245 i just change "table.executor" to "Banned By"?
oh
bruh I'm a tard xD
@topaz bay yes I have done many an optimization to reach the blazingly fast speed of 93 milliseconds
I'll run a profiler once I've actually finished but I see no point in prematurely optimising it
i
i've got it working now, idk how tho it's back to it's default smh, coz i was testing something but yeah seems fine ig
The lexing and parsing doesn't take that long afaik
it's the runtime that's the most slow I believe
but it speeds up after warmup anyway
So in my application I could have alot of similar strings
"United Kingdom" maybe a couple hundred times
I thought about using intern(), would that be a decent idea?
My other option would be a kind of Country.of("") which would return the same string if it already existed
Lol wtf
I managed to create a bug where if slowmode is enabled, User#getChatFormat always returns null
And I literally don't have a fucking clue how
Okay
That was not actually true
LMAO
In theory chatformats.size() never should return 0 but just in case lol
@topaz bay I still get This does not represent a hash :)(:
Nice dark blue @obtuse gale
You can enforce branch restrictions so that only certain users, teams, or apps can push to a protected branch in repositories owned by your organization.
hi
Location location = event.getClickedBlock().getLocation();
World world = ((CraftWorld) location.getWorld()).getHandle();
BlockPosition position = new BlockPosition(location.getX(), location.getY(), location.getZ());
if (event.getClickedBlock().getType() == Material.CHEST) {
TileEntityChest tileChest = (TileEntityChest) world.getTileEntity(position);
world.playBlockAction(position, tileChest.w(), 1, 1);
} else {
TileEntityEnderChest tileChest = (TileEntityEnderChest) world.getTileEntity(position);
world.playBlockAction(position, tileChest.w(), 1, 1);
?codeblocks
Use codeblocks for formatting code or configuration files:
```<language name>
<your code here>
```
For example:
```yaml
test:
- “hi”
- “there”
```
Produces:
test:
- “hi”
- “there”```
I added this cuz the open animation of my ec wasnt working
But now it stays open and doesnt close
Added this to my openEvent
java ;c
Location location = event.getClickedBlock().getLocation();
World world = ((CraftWorld) location.getWorld()).getHandle();
BlockPosition position = new BlockPosition(location.getX(), location.getY(), location.getZ());
if (event.getClickedBlock().getType() == Material.CHEST) {
TileEntityChest tileChest = (TileEntityChest) world.getTileEntity(position);
world.playBlockAction(position, tileChest.w(), 1, 1);
} else {
TileEntityEnderChest tileChest = (TileEntityEnderChest) world.getTileEntity(position);
world.playBlockAction(position, tileChest.w(), 1, 1);```
Try updating the block on close
but won't it then be closed immediately
instead of like the animation of a chest closing
Not sure, test it
so update an ec block?
When you close the inventory yea
@EventHandler
public void onCloseEnderChest(InventoryCloseEvent event) {
if (event.getView().getTitle().contains(event.getPlayer().getName() + "'s EnderChest")) {
// save inventory to hashmap
extrainv.put(event.getPlayer().getUniqueId(), event.getInventory());
}
}
yes so this and than add the block update
but how do I do that?
mhm, also don't use title to compare inventories
just remove the .getTitle()?
No, use either inventory holders and make your own inventory, or something else
Im using a hashmap to keep the inv
and save the hashmap into a file ondisable
and load it onenable
Make an interface which will contain a uuid of the inventory
(and the base inv methods), and use that to compare the inventories
Might need to use packets if it's doesn't show up normally
Maybe due to a setCancelled(true); event
perhaps
Try updating the block on close
But how do I update the block?
I should start with that
Ok ty
And should I make a update() method for it?
Gives an error and Thats the solution
or should I include ENDER_CHEST somewhere?
Hi I'm fiddling around with the Mojang api and am trying to get the users skin as like a JPEG but the API returns this:
{'id': '9f9cc91354cf4c4fae4deaf7f258cea9', 'name': 'Dinoosawruss', 'properties': [{'name': 'textures', 'value': 'ewogICJ0aW1lc3RhbXAiIDogMTU5MjMwMzc5NDQwNywKICAicHJvZmlsZUlkIiA6ICI5ZjljYzkxMzU0Y2Y0YzRmYWU0ZGVhZjdmMjU4Y2VhOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEaW5vb3Nhd3J1c3MiLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWRiZTlkZTg3MWNjOTFhNjUyMGFmMTRjZWJkYzc0ZWRiMTIyMmZhMjFiODdjMzAwMDZlMTVhYzVmZmU5MmQ1ZiIKICAgIH0KICB9Cn0='}]}```
Any idea how I could convert that to some kind of jpg or png?
Use a base64 converter to turn that "value" into a json that contains the url to the image @pale crown
Ahh ok thanks @distant sun
{
"timestamp" : 1592303794407,
"profileId" : "9f9cc91354cf4c4fae4deaf7f258cea9",
"profileName" : "Dinoosawruss",
"textures" : {
"SKIN" : {
"url" : "http://textures.minecraft.net/texture/edbe9de871cc91a6520af14cebdc74edb1222fa21b87c30006e15ac5ffe92d5f"
}
}
}```
json
@obtuse gale because you havent wrapped it in braces bruh
{
coolGenerator69: {
item: {
type: "STONE"
meta: {
name: "coolBlock69"
glowing: true
}
}
// How many Items should spawn per minute in each tier, in order of ascending tier
speedTiers: [5,10,15,20]
// How long until it should tier up from beginning of game
timeToTiers: [5,10,15,20]
locations: [
"420,69,420",
"410,69,420",
"400,69,420"
]
}
}```
REE
Masive ree
I literally just copy pasted what you have
And just for fun, I emulated your exact code
That reads from a file, and uses type inference to pass the key and value types
It works fine
You need to write some debug statements to make sure youre actually pulling the data you expect you are
block#update();
@hot hull doesn’t work?
Oops I didn’t tag
Happened automatically
How do you test things like that sx? Is there a faster way to check if my korm is valid other than just building the plugin everytime?
whats a test class?
oh dear god in heaven
oh that package i never use?
1 is your entire project
2 is main, 3 is test
inside of the test directory, theres java or kotlin
put java or kotlin code in there
and you can run it
In IntelliJ
oo
Yeah
👍
what about loading these commands?
do I have to register event listeners in my JDABuilder or do they just automatically load?
because I can see this CommandManager class must do something
Loads automatically
ah okay
The CommandManager handles all that stuff
what about my bot token?
do I need to still create my own JDA instance or do I feed that in some how
I mean you always need to have a JDA instance, you have to pass it to the CommandManager
ah okay
so I instantiate CommandManager and pass it a JDA instance got it
cheers Matt
Yeah ;p
then I just call register() to register my command
now time to see if this damn bot will actually work properly lol
because lava player isn't exactly the easiest thing to get the hang of imo
Yeah then register the command, messages, etc using it
I can tell yeah
that's the demo it gives you for JDA
trying to convert that to Kotlin is a nightmare
and I know I could've done this so much better
for now it only works with direct URLs
Tempted to build a library for spigot but not sure what
finally the mother fucker plays music lol
also, is there a way to change what the bot outputs if the command doesn't exist @ocean quartz ?
Yeah with the registerMessage, register a new one with cmd.no.exists as the id and it'll override it
custom message when smh Matt
Wdym?
ah okay
also this lava player is really lacking a wiki on how to use it
or something
Still though which custom messages you want? ;o
for usage
I mean you can always do that no? ;o
who here knows how to use lava player
Oh wait not yet implement on the JDA
because the documentation on how to use it is atrocious
I know it's not xd
Gaby there is no hardcoded message all messages are overridable
later
lazy mf
shhhh
lazyyyy
OH DAMN @old wyvern
looks cool, but that's bound to cause some FPS drops
looks nice
unlike 1.8
Stfu Aj
imagine getting fps drops in mc 
Imagine thinking the game it's well made
Imagine playing MC when not having frame drops
n1 frosty
imagine playing 1.8 MC
u got me there
Nice good job

@topaz bay how are you parsing tuples when they could be paranthesized expressions? I mean for example 1 + (2 * 3) could parse as a single value tuple (2 * 3) or it could be a paranthesized expression 2 * 3
currently they're parsing as tuples and i'm not sure how I could avoid that
apart from using different syntax
Don't have tuples
Well
#(1, 2) I guess I could use something like that
Maybe require a type or something
or require a tuple to be at least 2 values
that's another option
but then I'd need to make some native function to instantiate them behind the scenes
which i kinda want to avoid
they should be a language feature rather than part of the standard lib
oh
yeah I'll probably go down that route as well
Its kinda in the name
precisely
lol
Hmm
So my logic for parsing tuples actually only even begins after a comma is found
https://img.bristermitten.me/15-35-28-16-06-20.png that's better
yeah I'm doing the same pretty much
that's kinda nasty
OH DAMN
@hot hull
ayyy gj man
Please use a paste service to share configs, errors, code and long logs.
• HelpChat Paste
still gross
Wheres your type parsing?
It's called advancement
precisely
Improvement should you call it
Thats kinda backwards though
does your language do absolutely nothing? I don't think so. therefore frigga is better
As sealed classes are an improvement over abstract classes
it's not theft if it's OSS and you change it
FUCK
IT'S NOT
literally nothing alike
yeah, totally totally different
what about them?
ew
makes a change
This is why you don't write code at 2+am
also, there's probably something really really wrong with that, but what exactly is the issue?
okay yeah
actually is it though?
because break will exit the for loop
meaning that second quitScope() doesn't get called
what does quitScope() do though?
what's that text saying Sxtanna, 5/18/2020 2:45 AM?
old and new
okay yeah that's dumb sx
Its gittoolbox
that's not even supposed to happen but EZ
And yes, the second one wouldn't be called
But it doesnt need to be there at all
Its going to be called no matter the conditions
It should be outside of them
yeah I see what you mean
join and quit scope move the current program scope
ah okay
Properties can be redefined inside of deeper scopes
technically, everything that can be defined, can be redefined in a deeper scope
And the context just searches in to out
also why tf am I getting Error: Could not find or load main class dev.bombardy.bardybot.BotKt when trying to run my main method in Kotlin?
reimport your project
just exit IntelliJ and reopen it?
okay
"Reload All Maven Projects" that'll be the one
and yes, I am still using Maven
it's what I'm used to
That's not an excuse
if I can get Gradle to create the src and test directories when I create new modules then I'll use it
Do you not have the java or kotlin plugins defined?
It only makes them when you have them defined and enabled
idk
for obvious reasons
do I need to do that manually?
thats... not a question
JDA isn't fucking well documented
which has a bit of a learning curve but is arguably more powerful
well, not on the Wiki
or actually idk
I think JDA isn't too bad
it's Lava Player that's the real bitch
anyone here ever used lava player before?
jda over d.js anytime tbh
Absolutely not.
what do you use for discord music bots?
dumb question but how does one loop through a directory in resources without copying it somewhere?
also:
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.72'
}
group 'dev.bombardy'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
compileKotlin {
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8
}
compileTestKotlin {
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8
}
is that fine sx?
Change the values "1.8" to JavaVersion.VERSION_1_8
and define that somewhere?
pretty much
it's underlining the kotlinOptions and saying "No candidates found for method call kotlinOptions"
is that fine?
okay
okay
now I need to depend on JDA
and also something that can handle music playing
idk what to use since lava player has literally no documentation on most things
anyone got any ideas?
How does it have no documentation?
nothing there about searching
That... would have nothing to do with the player?
searching youtube is something that lava player supports
I checked the source files and it's in there, but there isn't anything on it anywhere else
Wdym it supports searching?
it supports searching youtube, soundcloud, etc. for tracks/videos
jda over d.js anytime tbh
@distant sun 😮
Thats kinda odd
The ability
lava player is a music playing API, not a discord voice API
idk what else to use lol
by a long time ago
maybe just JDA's API
lol
I'm aware its a music playing api
But it seems out of scope to support searching for music
It should be just a simple input output
idk
you can probably just use the youtube api
yeah true
or I could use LavaClient
which is the API made by the same guy who made FredBoat
isnt that in js?
fredboat is java
^^^^
smh
Thats me underneath all those pixels
badtanna dies
LOL
nothing new there
who's clapped face is that?
Its always fun seeing myself in these videos
wait
lol
I should become a streamer ;(
fredbot has some kotlin
FredBoat is Kotlin
:o
NO
DO IT!
I should become a streamer ;(
@topaz bay or videochat
I just found a clip from one of my old videos
I have a cringe af youtube video out there, the only video i ever spoke on, 10 minutes cod ghosts gameplay lmao
@topaz bay onlyfans
????????
How about this https://www.youtube.com/watch?v=4zN5QwlBlzY
hey saw that before
what the f
You play with motion blur on, disgusting