Skocz do zawartości

Ranking

Popularna zawartość

Treść z najwyższą reputacją w 11/20/20 uwzględniając wszystkie działy

  1. gratuluję oryginalnego poradnika, dobra robota
    3 punkty
  2. Magiczny enchant Sprawia że po kliknięciu danym przedmiotem na enchant otwiera gui: [Mieczem, Zbroją, Łukiem, Kuszą] INFORMACJE: Skrypt jest w 99% stworzony przez RoYYaLLMiNNa Jestem wyłącznie osobą która będzie aktualizować 1% tego skryptu i tworzącą ją do aktualnych wersji gdyż autor nie jest aktywny od 2016 Co robi skrypt? Tworzy on Gui dla enchantu Posiada on Enchant dla nowych rzeczy Nie musisz już tworzyć biblioteczek aby enchantować Wygląd: ChangeLog: V 2.1 - Dodałem do enchantu: Łuk, Kusze - Usunąłem wszelakie błędy - Zmieniłem dodawanie puktów na 1.0 - Zabezpieczyłem komendy - Dodałem dźwięk otwarcia enchantu To Do list: - Dodać Zbroje Netherytowe - Dodać Tarcze - Dodać dźwięk przy otwieraniu menu [ Wykonane ] - Dodać Elytre - Zabezpieczyć komendy [ Wykonane ] Wymagane: - Skrypt - WildSkrypt - SkQuery Pobranie:
    2 punkty
  3. Dorek

    Sprzedam WPLN LVLUP (tańsze VPS'y!)

    Witam, na sprzedaż mam WPLN na hostingu LVLUP.PRO. Przelicznik (stan na 25.06.2021) : 0.5 (50 zł = 100 WPLN) Dostępność WPLN (stan na 25.06.2021) : 100 Minimalna ilość WPLN: 30 Gwarancja jakości Zajmowałem się masowym handlem WPLN na forum LVLUP w 2017 roku, posiadam kilka pozytywnych opinii w tematach: klik, klik Jestem także moderatorem serwera Discord "Ryneczek LVL WYŻEJ", na którym też sprzedaję WPLN'y. Procedura zakupu Po ustaleniu transakcji i otrzymaniu płatności, tworzę ticketa z prośbą o przelanie WPLN na Twoje konto. Czas realizacji zgłoszenia wg. lvlup wynosi do 48h. Obsługiwane płatności: PayPal, Przelew/BLIK Kontakt Zalecany kontakt to Discord: DoreK#1444 Można też napisać prywatną wiadomość na tym forum, lecz czas odpowiedzi może być dłuższy.
    1 punkt
  4. CoFFeIN04

    Sprzedam WPLN LVLUP (tańsze VPS'y!)

    Serdecznie polecam, transakcje przebiegła bezproblemowo
    1 punkt
  5. Libter

    Zarządzenia

    Zarządzenie @Libter 01/20.11.2020: @Reedzev_ traci rangę administratora na rzecz zasiadania w radzie ze względu na nieaktywność. @wiktorm12 traci rangę próbnego administratora na rzecz moderatora ze względu na nieaktywność. @JanekJaran traci rangę próbnego administratora ze względu na nieaktywność.
    1 punkt
  6. Libter

    Wnioski w kategorii "Ostracyzm"

    Co najmniej znajomi nie powinni głosować, zwłaszcza że wyższe abonamenty mogą ich sobie stosunkowo dowolnie zapraszać.
    1 punkt
  7. Jako, że minął tydzień od otwarcia wniosku - głosowanie zostaje zakończone zgodnie z §4.2.1 regulaminu serwera. Wniosek uzyskał 21 głosów za i 10 głosów przeciw co daje łącznie 67,74% głosów. Tym samym zgodnie z §4.2.2 regulaminu serwera - wniosek o blokadę bezterminową dla gracza @JanekJaran zostaje odrzucony.
    1 punkt
  8. Kormic

    Skanowanie skrzynki

    W takim wypadku są na to dwa sposoby: 1. Użycie wyrażenia 'item amount' wraz z funkcją sum(). send "Posiadasz %sum(item amount of all items in player's inventory)% przedmiotów w ekwipunku!" 2. Zapętlenie przedmiotów w ekwipunku gracza i dodawanie 'item amount of loop-item' do zmiennej lokalnej, a następnie wyświetlanie jej. loop all items in player's inventory: add (item amount of loop-item) to {_a} send "Posiadasz %{_a}% przedmiotów w ekwipunku!"
    1 punkt
  9. Jak najbardziej. Z tego co zrozumiałem, to masz na myśli czas systemowy serwera (można powiedzieć, że rzeczywisty). W takim razie daję prosty przykład z wyrażeniem 'formatted as'. every 1 minute: if (now formatted as "HH:mm") is "15:00": # Twój kod
    1 punkt
  10. 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
  11. Skrypt w mojej ocenie jest co najmniej tragiczny. Już mówię dlaczego. 1. Co to ma być? if {enchant.%event-block%} is false: loop 100000 times: if event-block is enchantment table: wait 0.1 seconds set {enchant.%event-block%} to true 2. Skrypt używa zbugowanego 'format slot'. Skoro zabierasz się za jego przerabianie, użyj 'set slot'. 3. Ponad 1000 linijek definicji wielu komend... W dodatku niczym nie są zabezpieczone te komendy. Zdaję sobie oczywiście sprawę z tego, że ten skrypt liczy już sobie ponad 4 lata. Mimo wszystko chciałem wskazać wszystko, co w nim jest błędne czy też dziwne.
    1 punkt
  12. xAxee

    Siemkaa

    Siemkaa
    0 punktów
  13. Witajcie! Jeżeli szukacie sposobów na JSON w skripcie (1.12+), nie musicie już szukać! Wymagana ta wersja pluginu Skript lub nowsza. . . . Ten poradnik jest dla objaśnienia o co chodzi, jeżeli nie chcę wam się czytać. Wejdźcie w link powyżej i poszukajcie w informacjach o zmianach przykładów JSON które można użyć w skrypcie. Na początek zróbmy tak, aby po najeżdżeniu na tekst wyskakiwała jakaś wiadomość. Zrobimy to w formie komendy: command /test: trigger: send "<tooltip: wiadomosc ktora ma wyskakiwac>test<reset>" to player Tekst, który podświetlił się wam na fioletowo pokazuję wiadomość która wyskakuję, można to zmienić(wiadomość). Wszystkie nawiasy też trzeba pisać! Poprzez wpisanie <reset> do wiadomości która zostaje wysłana po wpisaniu komendy, na dalszy tekstu nie będzie wyskakiwać wiadomość. Na przykład: command /test: trigger: send "<tooltip: wiadomosc>test<reset> <tooltip: wiadomosc>test2<reset>" to player Teraz jak zrobić, aby po kliknięciu na tekst wpisywało od razu komendę: command /test: trigger: send "<command: /testkomenda>test<reset>" to player command /testkomenda: trigger: send "tescik" to player UWAGA: Pamiętajcie żeby wpisać też ukośnik ponieważ gdy go nie wpiszecie, wyślę wiadomość, a nie komendę! Takie same zasady z <reset> co w tooltip. Też można zmieniać pole które się podświetliło. Te same zasady są następnym przykładzie, nie chcę się powtarzać. Teraz zrobimy coś takiego, aby po kliknięciu w tekst napisało nam komendę, ale nie wysłało. command /test: trigger: send "<suggest command: /testkomenda>test<reset>" to player Zaznaczyło command na fioletowo, lecz tego akurat nie możecie edytować(tego podświetlonego na fioletowo command)! Teraz zróbmy tak, aby po kliknięciu w tekst, przekierowywało nas na stronę. command /test: trigger: send "<link: URL strony>test<reset>" to player Zasady takie same jak w <command... WAŻNE! Nie trzeba robić spacji przy <link:, <command itp. zrobiono to, aby się podświetliło na fioletowo. . . . To już koniec poradniku, liczę na pozytywny odzew. To mój pierwszy poradnik! Jeżeli chcecie bardziej rozwiniętą wersję (bo to ten poradnik to tylko podstawy) to tutaj macie link do bardziej rozbudowanego posta użytkownika PanMaruda.
    0 punktów
  14. Libter

    Zarządzenia

    Zarządzenie @Libter 01/19.11.2020: Zarządzenie 01/17.11.2020 otrzymuje punkt 7 o treści: W trakcie stanu wojennego właściciel może podjąć decyzję o czasowym całkowitym wyłączeniu czatboxa.
    0 punktów
Ten Ranking jest ustawiony na Warszawa/GMT+02:00
  • Najwięcej postów w tygodniu

    Fendi
    Fendi
    2 posty
    Quexsu
    Quexsu
    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ę...