Skocz do zawartości

Ranking

Popularna zawartość

Treść z najwyższą reputacją w 08/30/21 uwzględniając wszystkie działy

  1. rykker

    Co jest złego w pvp powyżej 1.8?

    Chce tylko powiedzieć, że to co piszecie nie ma sensu nie macie zielonego pojęcia i jest to coś w stylu "nie wiem ale się wypowiem" ci co mówią, że można sobie odpalić makro 100 cps i być najlepszym, otóż nie. Obstawiam, że większość użytkowników która się wypowiedziała nie gra w pvp dużo, co dzień i nie ma za bardzo o nim pojęcia. Jeżeli wiecie cokolwiek o pvp znacie pewnie takie serwery jak minemen, lunar, coldpvp i inne(nie pomylcie z polskimi shitowymi serwerkami blazingpacka jak np. onlypvp) na tych serwerach nie grają na makrze bo wiedzą, że to niszczy fun z gry sobie i przeciwnikowi. Liczą się nie tylko klikanie w myszke i trzymanie w, a takie rzeczy jak w tapping, s tapping, block hitting, zakładanie strefy, umiejętne rzucanie pot, rzucanie pereł, itd. Nie liczą się zbytnio cpsy bo i tak grasz klikający one clickiem 7 cps może pokonać gracza klikającego 20 cps, jedyne czym się różni to knock który jest bardziej znaczący w sumo, itp. Chociaż klikanie minimum 11 cps nie jest trudne i nauczenie się np. butterfly. Aim również gra ważną role a jeszcze większą w pvp 1.9. Co prawda nie trzeba klikać dużej ilości cps ale trzeba mieć dobrego aima. Piszecie o taktyce, myśleniu - ??????? nie mam pojęcia o jakich taktykach i myśleniu mówicie XD. Pvp 1.8 jest ciągle używane i nie da sie zagrać np. bedwars, skywars, itd. na pvp 1.9. Pozdrawiam rykker, pvp 1.8 zawsze w sercu i nic i nikt nigdy tego nie zmieni
    1 punkt
  2. AJent

    Drop.

    To ci wysle prywatna wiadomosc, nie chce zeby ktos inny mi kradl dropa.
    1 punkt
  3. Okk

    Drop.

    Wyślij cały kod, przerobię go i Ci wyślę.
    1 punkt
  4. Notro

    Glitchtrap misiu

    1 punkt
  5. YoTeam

    Legendy rodzą się od Legend

    Legendy rodzą się od Legend
    1 punkt
  6. Podczas lekcji: poznasz zasadę dołączania pliku .json do projektu, poznasz sposób stworzenia pliku konfiguracyjnego z rozszerzeniem .json, poznasz działanie prostego handlera komend, poznasz przykładowy wygląd drzewa plików, stworzysz automatyczną komendę pomocy Witam, w kolejnej lekcji tworzenia botów do discorda. Dzisiejszy projekt będzie kontynuacją poprzedniej lekcji (kod z niej możesz skopiować z poprzedniego komentarza bądź z githubowego repozytorium: https://github.com/wiktorm12/-Poradnik-DiscordBOT-skript.pl). W tej lekcji czeka nas dużo nauki i dużo zmian w dotychczasowym projekcie dlatego już nie przedłużam i zaczynamy. Pierwszym krokiem dzisiejszej lekcji będzie stworzenie drzewa plików jakich będziemy potrzebować. W katalogu głównym tworzymy plik handler.js to właśnie ten plik będzie odpowiedzialny za aktywowanie kolejnych komend, oraz tworzymy dwa katalogi jeden nazywamy config, w nim będą znajdowały się pliki konfiguracyjne dlatego już teraz umieszczamy w nim pusty plik main.json będą w nim się znajdowały główne dane konfiguracyjne, drugi katalog nazywamy cmds i umieszczamy w nim dwa pliki które będą odpowiadały komendą: czas.js, help.js Jeżeli projekt mamy już przygotowany możemy zacząć prace. Na początek użyjemy pliku konfiguracyjnego, aby zdefiniować w nim token i prefix bota, aby to zrobić musimy zamieścić w tym pliku dane w formacie JSON. W moim przypadku będzie to wyglądać tak: { "token": "Nzc1NjcxMDQ4ODEyNjI1OTMw.X6pt9Q.CIYWrDB1YWMTt_HL0hd9dSDtmow", "prefix": "!" } Jak możesz zauważyć format ten to format, w którym tworzy się obiekt, lecz w przeciwieństwie do JavaScripta, nazwy opcji muszą być w cudzysłowie. Teraz jak mamy już przygotowany plik konfiguracyjny musimy go użyć w naszym pliku bot.js, robimy to tak samo jak importowaliśmy dane z biblioteki DiscordJS const Discord = require('discord.js'); const config = require('./config/main.json'); const client = new Discord.Client(); client.login('Nzc1NjcxMDQ4ODEyNjI1OTMw.X6pt9Q.CIYWrDB1YWMTt_HL0hd9dSDtmow'); client.on('ready', () => { console.log("Bot został poprawnie uruchomiony"); }); client.on('message', msg => { if(msg.content == "!czas"){ const data = new Date; const godzina = data.getHours(); const minuta = data.getMinutes(); const sekunda = data.getSeconds(); msg.reply(`aktualna godzina: ${godzina}:${minuta}:${sekunda}`); } }); Ale co nam po dodaniu pliku konfiguracyjnego, jeżeli go nie używamy, a więc aby zacząć prace z danymi z pliku JSON należy jej użyć jak zwykłego obiektu. const Discord = require('discord.js'); const config = require('./config/main.json'); const client = new Discord.Client(); client.login(config.token); client.on('ready', () => { console.log("Bot został poprawnie uruchomiony"); }); client.on('message', msg => { if(msg.content == "!czas"){ const data = new Date; const godzina = data.getHours(); const minuta = data.getMinutes(); const sekunda = data.getSeconds(); msg.reply(`aktualna godzina: ${godzina}:${minuta}:${sekunda}`); } }); Sprawdźmy teraz czy to działa: Jak można było zauważyć prócz tokenu zdefiniowaliśmy także prefix, dlatego zaraz przedstawię sposób jak go użyć w naszym kodzie. client.on('message', msg => { const MSGcontent = msg.content; if(MSGcontent.startsWith(config.prefix)){ const args = MSGcontent.substr(config.prefix.length).split(" "); const cmd = args["0"]; if(cmd == "czas"){ const data = new Date; const godzina = data.getHours(); const minuta = data.getMinutes(); const sekunda = data.getSeconds(); msg.reply(`aktualna godzina: ${godzina}:${minuta}:${sekunda}`); } } }); Dużo nowości prawda? Ale spokojnie już wszystko tłumacze if(MSGcontent.startsWith(config.prefix)){ } String.startWith() <- ta metoda zwraca nam prawdę/fałsz w zależności czy dany string (czyli ciąg znaków) zaczyna się od tego co znajduje się w nawiasie w naszym przypadku jest prefix bota const args = MSGcontent.substr(config.prefix.length).split(" "); tutaj występują trzy nowe elementy czyli po pierwsze string.substr() co oznacza, że danego stringa odcinana jest dana ilość znaków, kolejne to string.lenght, jest to metoda zwracająca nam długość stringa w tym przypadku ilość znaków, które mają zostać odcięte i trzecią metodą jest string.split() <- tworzy ze stringa tablice, która jest podzielona przez ciąg znaków zawartych w nawiasie, w moim przypadku jest to spacja czyli dzieli wiadomość na poszczególne wyrazy. Sprawdźmy teraz czy to działa: Jak widać wszystko działa. Teraz zrobimy kilka akcji naraz. A dokładnie stworzymy handler – łapacz komend - będzie on polegał na wykonywaniu poszczególnych komend z odpowiednich plików. Pierwszą najprostszą czynnością jaką zrobimy będzie przeniesienie działania komendy do innego pliku i nadanie jej nazwy oraz opisu. A dokładnie będzie to wyglądać tak: module.exports = { name: "czas", description: "pokazuje aktualną godzine", run: msg => { const data = new Date; const godzina = data.getHours(); const minuta = data.getMinutes(); const sekunda = data.getSeconds(); msg.reply(`aktualna godzina: ${godzina}:${minuta}:${sekunda}`); } } Jak widać przypisaliśmy cały obiekt do tak zwanego obiektu modułowego: module.exports A opcja export służy do tego by wynosić domyślnie ten obiekt z pliku. Nadaliśmy również nazwę komendzie, która będzie nam potrzebna podczas budowania handlera to właśnie ona będzie wskazywała na komendę (w tym przypadki !czas) oraz opis który przyda nam się podczas tworzenia komendy pomocy. Kolejną rzeczą którą zrobimy to napiszemy handler, oto on: const czas = require('./cmds/czas.js') const config = require('./config/main.json'); const { readdirSync } = require("fs"); const { Collection } = require("discord.js"); module.exports = client =>{ client.commands = new Collection(); const commandFiles = readdirSync("./cmds").filter((file) => file.endsWith(".js")); for (const file of commandFiles) { const command = require(`./cmds/${file}`); if (command.name) { if (command.run) { client.commands.set(command.name, command); console.log(` ${file}`); } else { console.log(` ${file} - brak zdarzenia`); } } else { console.log(` ${file} - brak nazwy komendy`); } } client.on('message', msg => { const MSGcontent = msg.content; if(!MSGcontent.startsWith(config.prefix)) { return; } if(msg.author.bot) { return; } const args = MSGcontent.substr(config.prefix.length).split(" "); const cmd = args[0].toLowerCase(); if (!client.commands.has(cmd)){ return; } try { client.commands.get(cmd).run(msg); } catch (e) { console.error(e); msg.reply("Wystąpił błąd, zgłoś sytuacje administracji!"); } }); } Dużo, dużo dużo nowości wiem, dlatego już wszystko wyjaśniam: client.commands = new Collection() W tym miejscy tworzymy specjalną kolekcje, w której będziemy zapisywać nazwę naszej komendy i jej plik. const commandFiles = readdirSync("./cmds").filter((file) => file.endsWith(".js")) W tym miejscu przeszukujemy katalog z komendami używając filtra który zapisuje tylko te nazwy plików, które kończą się na .js. for (const file of commandFiles) { } Tutaj tworzymy specjalną pętle po tablicy wcześniej zapisanych nazw plików i zapisujemy poszczególny je jako zmienna file – będzie ona dostepna tylko na obszarze tej pętli. if (command.name){} i if (command.name){} Te dwa warunku sprawdzają czy dany obiekt w tym przypadku plik komendy posiada te dwie opcje. client.commands.set(command.name, command) W tym miejscu wykorzystujemy stworzoną wcześniej kolekcje i zapisujemy w niej nazwę komedy i obiekt pliku if(!MSGcontent.startsWith(config.prefix)) { return; } Tutaj sprawdzamy czy wiadomość nie zaczyna się od prefixu, ! w ifie znaczy zaprzeczenie warunku. if(msg.author.bot) { return; } Tutaj spradzamy czy wiadomość nie jest od bota, jeżeli jest zostaje zakończone działanie funkcji przez wyrażenie return; const cmd = args[0].toLowerCase(); Tutaj prócz wyciągania jak wcześniej po prostu komendy tutaj zamieniamy całą komendę na małe literki. if (!client.commands.has(cmd)){ return; } A w tym miejscu sprawdzamy czy dana komenda istnieje. try { client.commands.get(cmd).run(msg); } catch (e) { console.error(e); msg.reply("Wystąpił błąd, zgłoś sytuacje administracji!"); } Tutaj za pomocą funkcji try/catch wyłapujemy błędy, czyli jeżeli na przykład kod komedy miał by jakiś błąd to wyrzucamy go do konsoli. Ostatnim krokiem będzie poousuwanie zbędnych fragmentów kodu z pliku bot.js. Będzie on teraz wyglądał tak: const Discord = require('discord.js'); const config = require('./config/main.json'); const handler = require('./handler.js'); const client = new Discord.Client(); client.login(config.token); handler(client); client.on('ready', () => { console.log("Bot został poprawnie uruchomiony"); }); Sprawdźmy teraz jak to wszystko działa Jak widać wszystko działa perfekto. Ostanim elementem jaki zrobimy na tym kursie jest automatyczna komenda pomocy (dlaczego ostatnim dowiecie się na końcu). Plan na komendę pomocy jest taki: 1. Wyciągamy z wiadomości która jest przekazywana do komendy clienta, czyli naszego bota, na którym zapisane są wszystkie komendy 2. Następnie tworzymy embed wiadomość. 3. Wpisujemy w tą wiadomość wszystkie komendy wraz z opisami. 4. Jeżeli komenda nie ma opisu to wpisujemy „Brak opisu”\ Plan już mamy no to do dzieła oto kod całego mechanizmu: const Discord = require('discord.js'); module.exports = { name: "help", description: "Wyświelta informacje o wszystkich komendach", run: msg => { const client = msg.client; const embed = new Discord.MessageEmbed() .setColor('#0099ff') .setTitle('Lista komend'); client.commands.map(command => embed.addField(command.name, command.description, false)); msg.channel.send(embed) } } Tutaj też dużo nowości, dlatego znowu poopisujemy linijka po linijce const client = msg.client; Tutaj wyciągamy clienta z wiadomości tak jak pisałem w punkcie 1. const embed = new Discord.MessageEmbed() .setColor('#0099ff') .setTitle('Lista komend'); Tworzymy kolorową wiadomość o tytule Lista komend i kolorze niebieskim zapisanym w systemie hexadecymalnym. client.commands.map(command => embed.addField(command.name, command.description, false)); Funkcją map przerabiamy wszytskie wartości w kolekcji lub tablicy i przypisujemy ich wartość do argumentu. A następnie w samej funkcji dodajemy nowe pole embeda z wartością opisu komendy i ustawiamy by jedna linia odpowiadała jednej informacji. msg.channel.send(embed) I ostatecznie wysyłamy gotową wiadomość do kanału, na którym została wykonana komenda. A teraz sprawdźmy jak to wygląda: Jest idealnie To I to na tyle z podstawowego kursu pisania botów do discoda. To były podstawy teraz została praca z dokumentacją, którą znajdziecie pod tymi linkami: https://discordjs.guide https://discord.js.org/#/docs/main/stable/general/welcome Lub można napisać do mnie na skryptowym discordzie albo moim, do którego link pojawi się niebawem tylko musze napisać na niego odpowiedniego bota i dobrze dostosować rangi lub po prostu napiszcie pod tym wątkiem jakieś pytanie. Dziękuje wszystkim osobom, które śledziły na bieżącą jak i tym które przeczytały to później. Mam nadzieje, że tymi 3 lekcjami ukazałem wam, że JavaScript nie jest taki trudny. Trzymam za was kciuki miłego kodowania o/
    1 punkt
  7. GrajdeN

    Szukam Technika

    nom, bo czas to pieniadz
    0 punktów
  8. YoTeam

    Szukam Technika

    Nikt za free nie będzie pisał Pluginów, musiał by być ktoś nienormalny
    0 punktów
  9. Notro

    UwU Notro

    tego jeszcze nie było... mam rzone a z niom horom curke wienc nie bo mnie żuci
    0 punktów
Ten Ranking jest ustawiony na Warszawa/GMT+02:00
  • Najwięcej postów w tygodniu

    Quexsu
    Quexsu
    1 post
    Fendi
    Fendi
    1 post
    kinimod5021
    kinimod5021
    1 post
    bug128
    bug128
    1 post
    F3lip3za
    F3lip3za
    1 post
    Nieaktywny
    Nieaktywny
    1 post
    LusiaMC
    LusiaMC
    1 post
    Antychryst
    Antychryst
    1 post
    MICHALBEZSKINOW
    MICHALBEZSKINOW
    1 post
  • Najwięcej tematów w tygodniu

    bug128
    bug128
    1 temat
    Nieaktywny
    Nieaktywny
    1 temat
    LusiaMC
    LusiaMC
    1 temat
    Antychryst
    Antychryst
    1 temat
    MICHALBEZSKINOW
    MICHALBEZSKINOW
    1 temat
    artur9010
    artur9010
    1 temat
    0j_12
    0j_12
    1 temat
    xSebixx1
    xSebixx1
    1 temat
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...