Discord botu radīšanas dienas un nedienas

Jau trešo dienu cīnījos ar discord botu, jo es izdomāju pārāk plašu scope un tad nofeiloju kad nācās sākt testēšanu. Tad downscaloju uz vienkāršu ‘kad es tev saku čau, pasaki man čau atpakaļ’ un tas manī pat neklausījās :sob:
Un tad beidzot reāli pārlasot visas 10 koda rindas es sapratu, ka es nedevu tam atļauju klausīties. Stulbuma augstgals.
image
nākamā problēma, šīs ziņas būtu ļoti skaistas, ja viņš man parādītu, kādas ziņas tika nosūtītas. Bet. es par to šobrīd izvēlos nedomāt.

1 Like

Skaties error logus, gan jau ka vnk nepareizo mainīgo nolasi, kad atbildi ar received message.

Tev jaizmanto pats labākais tools, kas jebkuram kurš programmē ir pieejams - a Debug Duck

problēma bija tajā, ka es darbojos ar svētu pārliecību ka atļauja saklausīt ziņas ļauj tam arī tās saprast. kolīdz tādu atļauju atradu un iedevu, uzreiz aizgāja gan mazais testiņš, gan lielais koda blāķis, kas jau bija iepriekš uzcepts :nice: mana smadzene? masīva. gaļa? liela. muskuļi? kā skulptūrai

Saprast kodam tavas ziņas ļauj tikai un vienīgi pats kods, nevis atļaujas.

atļaujas tiek definētas kodā, tādēļ tev ir 50/50 taisnība

Ja tas ir IF statements, tad jā. Ja tas ir kkāds JSON fails, tad tas nav kods, tie ir dati.

tev tā šķiet, bet pirms ierakstīju GatewayIntentBits.MessageContent šajā rindā .js failā, tas nestrādāja! :o
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages] });

Yeah, but that’s literally data. Constants/Variables = data. Data != code. Code = logic.

@vriska un @jurchiks , zem kāda topika vēlaties lai pārceļu? Taisīt jaunu par discord botiem vai or kāds no pastāvošajiem?

atbrauc uz manu māju, paskaties man acīs un tad uzbrūc D:

laikam jaunu par discord botiem. kāpēc gan ne?

Eamu atvērts konkrētākiem ieteikumiem, varam doties super specifiski, vai vaļīgāk. Skatos tādu jau pastāvošu discord tematu nav. Ir iespēja izpausties, uzcept pēc savas patikas voenu, un es šo diskusiju pārcelšu tur :ok_hand:

“Discord botu programmēšana” I guess.
Lai gan izskatās, ka dižas jēgas nav, jo kāds par kaut ko apvainojās, un topiks ir dead.

? haha
es tikai negribēju vilkt vēl sarunu garumā jo pagaidām nedaudz atkal iesprūdu un fokusējos uz to
neatbildēju tev, jo sakaunējos, ka sajaucu lietas
nu gan, nu gan

Neko nesaprotu…

ok, reku ašu uzmetīšu, kā es tiku pie ļoti lobotomizēta bota, ar kuru es tagad smagi cīnos. šo info var atrast arī jebkur citur internetā, bet man nācās paraustīt matus, lai piedabūtu savējo pie dzīvības :[

!!!neuzņemos atbildību par problēmām!!!

ko es izmantoju: notepad++, cmd, node.js, savu privāto discord serveri priekš testēšanas

  1. dodies uz discord developer portal, ielogojies ar savu discord, ja tas jau nav automātiski noticis, un uztaisi jaunu application. vari pievienot bildi, aprakstu, tagus, utt. bet tas nav svarīgi bota funkcionalitātei

  2. dodoties uz tabu Bot nospied Reset Token un saglabā šo kodu un nerādi nevienam citam.grrr. arī neliec šo kodu galvenajā failā, ko radīsi. + šo kodu atkārtoti pēc lapas aizvēršanas vairs nedabūsi, tādēļ pieraksti kaut vai uz lapiņas (hehe)

  3. dodies uz oauth2 > url generator un atzīmē, ka tā scope ir ‘bot’. parādīsies vēl viens lodziņš kurā vari atzīmēt ko vien vēlies, bet man vajadzēja tikai lasīt ziņas/rakstīt ziņas. tad izmantojot saiti, ko redzi apakšā ielūdz botu uz savu serveri

  4. uzinstalē node.js

  5. ieraksti npm init -y lai dzemdētu papildus failus, kas būs nepieciešami botam

  1. ver vaļā cmd un ar to aizej uz konkrēto direktoriju un uztaisi mapīti tur. tad uzinstalē discord.js un dotenv.
npm install dotenv
npm install discord.js 

es izmantoju discord.js. viņu website ar vairāk pamācībām un labākiem paskaidrojumiem bet šis ir quick & dirty daļēji tutoriālis daļēji pieraksts man, lai es atceros, ko darīju.

  1. tad tev vajadzēs uztaisīt 2x failus: index.js un config.js. tajos tu liksi iekšā:
config.js
module.exports = {
  token: "liecsavutokenute"
}
index.js
// inicializē visu
const { Client, Events, GatewayIntentBits } = require('discord.js');
const { token } = require('./config.js'); //ar šo tu norādi, ka tokenu meklē citā failā
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent
] }); // dod nolādētās atļaujas - redzēt serveri/redzēt servera ziņas/lasīt servera ziņas

client.once(Events.ClientReady, readyClient => {
    console.log(`Sveiki, ${readyClient.user.tag}`); //kad bots būs veiksmīgi nokļuvis tiešsaistē, terminālī parādīsies šī ziņa
});

//ar šo tu klausies sūtītās ziņas un atbildi uz tām
client.on('messageCreate', message => {
  console.log(`Received message: ${message.content}`); //parāda, vai vispār bots saņem/saprot ziņas.
  if (message.content.toLowerCase() === 'hi') {
    message.channel.send('owo'); 
  }
});

client.login(token); //šeit atsaucies uz tokenu, ko iecepi config.js 
  1. tad terminālī raksti node index.js un, ja viss notika veiksmīgi un es neaizmirsu iekļaut kādu soli, tavā discord serverī bots iedegsies ar zaļu gaismiņu, terminālis tev teiks ‘Sveiks, botanosaukums#1234’ un tu varēsi teikt botam hi un viņš tevi agresēs un teiks owo.

beigās tavai bota mapei jāizskatās šādi
image

un tad rocies cauri pats visai dokumentācijai un mācies, kā panākt botam darīt to, ko tu gribi. pēc katras koda maiņas gan bots jāizslēdz ar ctrl+c, jāsagaida, kad tas izies offline un tad jāieslēdz atkal ar to pašu node index.js­. Varbūt nav jāgaida, kad tas izies offline, bet es tā daru jo man ir daudz laika.

Javascript gan nav mana iecienītākā valoda, tādēļ neuzņemos atbildību par shit kodu, bet ja tev sanāca šo izveidot, tad apsveicu. Tālāk pēc bota izveidošanas un pieprogrammēšanas vari to laist pasaulē, bet tur ir jāmeklē hosti utt… Es šo personīgi izmantošu tikai privāti (jo es to taisu, lai automatizētu šīs spēles darbību), un tādam nolūkam man pilnīgi pietiek ar lokāli palaistu un tā pie dzīvības uzturētu botu.

daži soļi ir ļoti vague jo rakstot svārstījos starp mērķauditoriju. ja kaut kas nav skaidrs, varu papildināt vēl. taisām savu botu armiju! tie, protams, varēst pateikt tikai ‘owo’ bet arī tas nav zemē metams panākums.

1 Like

FYI, Node projektus parasti sāk ar npm init, un tikai pēc tam instalē dependencies ar npm install ....
Tas pats arī ir teikts discord.js tutoriālī: Installing Node.js and discord.js | discord.js Guide

1 Like

hehe tagad zināšu. pirmā reize strādājot ar to! tūlīt pielabošu, lai būtu korektāk :D

1 Like

Also, silti iesaku izmantot Git (un kaut kādu Git klientu, kaut vai to pašu Git GUI) versiju kontrolei.

Strādā tas ļoti vienkārši:

  1. izveido lokālu repository (git init, bez parametriem)
  2. kad kaut kādas izmaiņas ir veiktas, izveido kommitu ar šīm izmaiņām (ar sakarīgu aprakstu, ko tu tur izdarīji!!!) (git add *, git commit -m "Added proper response to this or that event." - izmantojot Git klientu, var izvēlēties, kurus failus kommito, caur konsoli tor ir baigais gemorojs darīt, neiesaku);
  3. turpini veikt izmaiņas, un katru reizi, kad ir pabeigta viena vesela lieta, taisi jaunu kommitu;
  4. ja kaut kas kādā solī noiet greizi, tu vari revertot to kommitu vai pārlasīt, ko tieši tu tajā kommitā izmainīji, un tādējādi analizēt, kas nogāja greizi;
  5. Kamēr strādā pie kādas fīčas, tikmēr vienmēr Gitā vari paskatīties, kas pašlaik ir kodā izmainīts (git status - saraksts ar izmainītajiem failiem, git diff konkrēti izmaiņām) - šis ļoti noder, kad piemirstās, kas jau ir izdarīts, un kas vēl palicis.
  6. [OPTIONAL] Technically basic fīča - Gitā var taisīt tā saucamos branchus - git branch type/name-here, git checkout type/name-here; type/ prefikss ir vnk for convenience, e.g. feature/new-response-format, bugfix/this-shit-doesnt-work, maintenance/this-crap-again, etc. Tipiski tos sauc par feature branchiem, un pamatbranchu, ar kuru viss sākās - par main branch. Kad tiek uztaisīts jauns branch, visi kommiti iet tikai tajā feature branch, bet ne main branch. Tādējādi var strādāt pie vairākām lietām paralēli un pārslēgties starp tām ar git checkout branch-name, tikai jāatceras vispirms iekommitot izmaiņas, jo ja mēģinās pārslēgties no iesākta brancha ar nepabeigtām izmaiņām uz jebkuru citu branchu, tad izmetīs kļūdu (vai vismaz vajadzētu izmest, baigi sen neesmu termināli izmantojis priekš Git, neatceros). Un, kad feature branch ir pabeigts un viss strādā, tad git checkout main, git merge feature/blabla ← šī komanda ievilks visus kommitus no feature brancha main branchā. Un te ir visjautrākā lieta - var rasties konflikti. Tāpēc optional, jo ar tiem konfliktiem ir jāmāk apieties, un man bieži ir sanācis palīdzēt jaunākiem kolēģiem ar šo.
    Labā ziņa ir tajā, ka, strādājot vienam, pie pavisam vienkārša projekta, var elementāri iztikt bez branchiem.

man no git ir meeeeega alerģija kopš es pastrādāju 2gadus kā sistēmu analītiķis un mani tas traumēja kad es uztaisīju megaupsi un commitoju kaut ko production branchā, jo man, izrādās, bija tāda privilēģija to darīt.
image

bet git gadījumā tad jāatzīmē, ka config.js jāliek .gitignore, lai tavs tokens netiek nekur triekts ārpus tava skatuloka

git ir ļoti forša fīča. bet es mmmmmmmmnemākujoprojām. nepieņemu jautājumus unvai kritiku par šo. programmēšana nav mans maizes darbs :D

1 Like