Disa kohë më parë Kam krijuar një bot Discord që kishte një detyrë të rëndësishme: t'i njoftonte përdoruesit se kur do të lëshohej Mount & Blade II: Bannerlord. Pasi e shtova këtë bot në serverin tim Discord (një server i vogël, familjar/mik) kam marrë shumë kërkesa për shtimin e më shumë funksionaliteteve në robot: komanda të personalizuara, përgjigje të personalizuara, etj., të cilat të gjitha u shtuan. Këto ndryshime janë zakonisht shumë të vogla dhe nuk kërkojnë shumë përpjekje, gjë që më bëri të mendoj se duhet të ketë një mënyrë për ta automatizuar këtë.

Kjo çoi në krijimin e AnyBotty, një robot Discord që lejon përdoruesit të krijojnë komandat e tyre me mesazhe të personalizuara dhe madje edhe përgjigje të bazuara në imazh. Ka dy komponentë kryesorë për këtë bot: ndërfaqja/serveri i uebit duke përdorur HTML/JS dhe Node dhe vetë roboti, i shkruar në Python. Një aplikacion ueb u zhvillua për të shtuar komandat në mënyrë që përdoruesit të mund të ngarkonin skedarë për komandat e tyre të personalizuara. Në mungesë të skedarëve, e gjithë kjo logjikë mund të inkorporohet në vetë robotin përmes disa komandave të administrimit.

Aplikacioni Ueb

Për të filluar, përdoruesit e robotit kanë nevojë për një mënyrë për të ngarkuar informacionin e komandës dhe imazhet që do të jenë të aksesueshme nga roboti. Kjo bëhet përmes një aplikacioni shumë bazë në internet. HTML përmban një formë të shëmtuar (pa dekorim) që dërgon kërkesa në një server nyje përmes API-së së marrjes së JS. Paralajmërohu, unë nuk jam një zhvillues në internet, por punoj në sisteme mbështetëse pothuajse ekskluzivisht.

Zëvendësimi i YOUR_SERVER_URL me URL-në dhe pikën fundore të kërkesës për serverin tuaj në këtë HTML duhet t'i futë këto të dhëna në skedarët JSON të përshkruar më poshtë.

Më pas, konfigurohet një server Node.js për të pranuar kërkesat nga kjo faqe ueb dhe për të shtuar të dhënat në disa skedarë JSON që do të përdoren nga roboti për të krijuar përgjigjet.

JavaScript e mësipërme është e mbushur me komente që shpjegojnë funksionalitetin. Në thelb, API po dëgjon në portin 9009 dhe përmban një pikë fundore në të cilën postohen të dhënat e formularit, abadd(AnyBotty add). Kjo metodë do të analizojë të dhënat e formularit, do të verifikojë se ka të dhëna të mjaftueshme për të krijuar një komandë dhe, nëse ka të dhëna të mjaftueshme, krijon komandën. Informacioni i komandës shkruhet në dy ose tre skedarë JSON:

  1. help.json:një hartë nga emrat e komandave në mesazhet e ndihmës. Këto shfaqen kur një përdorues shkruan !ab help dhe është mënyra e vetme për të parë se cilat komanda janë të disponueshme.
  2. messages.json:një hartë nga emrat e komandave në tekst që duhet t'i kthehet përdoruesit nga bot kur komanda të ekzekutohet. Teksti i mesazhit nuk kërkohet, kështu që jo të gjitha komandat do të jenë të disponueshme në këtë skedar.
  3. files.json:një hartë nga emrat e komandave te skedari që do të kthehet nga roboti. Përsëri, kjo nuk është një fushë e detyrueshme kështu që mund të mos përmbajë të gjitha komandat.

Pasi një komandë është ngarkuar me sukses, AnyBotty riniset përmes skriptit bash më poshtë. Vini re se po përdor bibliotekën forever JS për të siguruar që procesi të jetë gjithmonë në punë (për bot-in dhe API-në e Nyjeve).

Nëse përdorni ndonjë nga ky kod, sigurohuni që të zëvendësoni ‹BOT_DIR› në skriptin e serverit dhe ‹ANYBOTTY_DIRECTORY› në skriptin e rinisjes me vlerat e sakta në rastin tuaj (ato duhet të jetë e njëjta vlerë).

Kur gjithçka është thënë dhe bërë, ndërfaqja e internetit më poshtë përdoret për të ngarkuar komanda të reja.

Mosmarrëveshja Bot

Më pas, ne do të krijojmë robotin Discord në Python duke përdorur "Discord.py". Për shembull, ofrohen tre skedarë të paracaktuar të konfigurimit JSON. Këto skedarë janë përshkruar më sipër.

Këto tre skedarë përdoren nga bot për të ekzekutuar komanda.

Gjithashtu, kërkohet nga roboti Discord, kodi i robotit tuaj i krijuar nga Discord. Unë e ruaj këtë në një skedar JSON gjithashtu i cili lexohet nga roboti në fillim. Ju gjithashtu mund ta ruani çelësin tuaj në skedarin auth.json ose thjesht ta keni çelësin në kodin tuaj Python. Më shumë informacion rreth këtij konfigurimi mund të gjenden në "postimin tim të mëparshëm".

Me këto skedarë, ne mund të konfigurojmë botin.

Së pari, roboti duhet të niset, gjë që është magjia që e bën atë të disponueshëm për serverin(ët) tuaj Discord

Kjo ka dy varësi, json dhe discord nga discord.py.

Klasa e klientit bot përmban metoda për të bërë konfigurimin fillestar dhe një komandë që thirret në dalje (që nuk bën pak a shumë asgjë).

Në konstruktor, direktoria bazë vendoset dhe ngarkohen të dhënat nga tre skedarët JSON, të përshkruara më parë. Më pas, na duhet një metodë për të pranuar mesazhe nga klienti (serverët e Discord). Ky bot do të analizojë vetëm komandat që fillojnë me !ab të gjitha mesazhet e tjera do të shpërfillen.

Kjo metodë merr informacion në lidhje me grupin, kanalin, përmbajtjen e mesazhit dhe përdoruesin, i cili analizohet nga logjika e komandës.

Logjika e komandës (process_command)merr informacionin nga mesazhi dhe përcakton se cilat përgjigje t'i kthejë përdoruesit.

Bot ofron një komandë të integruar, ndihmë, e cila i kthen përdoruesit të gjitha komandat që janë në dispozicion duke përfshirë mesazhet e ndihmës që ofrohen nga krijuesit e komandave. Përndryshe, objektet, skedarët, ndihma dhe mesazhet JSON përdorin emrin e komandës si çelës për të marrë çdo mesazh përgjigjeje ose skedar të lidhur me komandën e dhënë. Nëse komanda nuk është e pranishme në skedarë, ajo injorohet.

Së fundi, përfshihet logjika për të dërguar në të vërtetë përgjigjet (skedarët dhe/ose tekstin) te klienti Discord.

Kjo logjikë është mjaft e drejtpërdrejtë. Informacioni i grupit dhe kanalit përdoret për të përcaktuar se ku të dërgohet mesazhi dhe discord.py API përdoret për të dërguar mesazhin në vendin e duhur.

Kodi i plotë për robotin duket kështu

konkluzioni

Në këtë postim, unë prezantova arsyetimin dhe zbatimin pas komandës sime të personalizuar Discord bot, AnyBotty. Megjithëse e kam krijuar këtë bot brenda javës së fundit, ne tashmë po argëtohemi shumë me të në serverin tim Discord. Një efekt anësor i papritur është misteri se kush i krijoi në të vërtetë komandat (që nuk dihet për askënd) dhe emocioni për të parë nëse ka ndonjë përmbajtje të re. Me kusht që të keni një server tuajin (ose ndonjë mënyrë tjetër të pritjes), mendoj se një bot si ky është një shtesë shumë e vlefshme për çdo server. Nëse ka interes të mjaftueshëm, mund të konsideroj ta konfiguroj këtë si një aplikacion Discord që mund të shkarkohet dhe integrohet lehtësisht.

Kodi i plotë

Kodi i plotë mund të gjendet në "magazinë e GitHub të botit". Do t'ju duhet të përdorni serverin tuaj për aplikacionin në internet dhe robotin Discord. Informacioni mbi konfigurimin e robotit mund të gjendet në "postimin tim të mëparshëm në këtë temë". Informacioni për konfigurimin e aplikacioneve të thjeshta të uebit ka me bollëk në ueb.