Creu bot Discord ar .NET Core a'i leoli ar weinydd VPS
Helo Khabrovites!
Heddiw fe welwch erthygl a fydd yn dangos i chi sut i greu bot gan ddefnyddio C# ar .NET Core a sut i'w redeg ar weinydd pell.
Bydd yr erthygl yn cynnwys cefndir, cam paratoi, ysgrifennu rhesymeg a throsglwyddo'r bot i weinydd pell.
Rwy'n gobeithio y bydd yr erthygl hon yn helpu llawer o ddechreuwyr.
cynhanes
Dechreuodd y cyfan ar un noson hydref ddi-gwsg a dreuliais ar y gweinydd Discord. Ers i mi ymuno ag ef yn ddiweddar, dechreuais ei astudio i fyny ac i lawr. Ar ôl dod o hyd i'r sianel destun "Swyddi Gwag", dechreuais ymddiddori, ei hagor, a chanfod ymhlith y cynigion nad oedd o ddiddordeb i mi, dyma:
"Rhaglennydd (datblygwr bot) Gofynion:
gwybodaeth am ieithoedd rhaglennu;
gallu ar gyfer hunan-ddysgu.
Пожелания:
y gallu i ddeall cod pobl eraill;
gwybodaeth am ymarferoldeb DISCORD.
Tasgau:
datblygu bot;
cefnogi a chynnal y bot.
Eich budd-dal:
Cyfle i gefnogi a dylanwadu ar y prosiect yr ydych yn ei hoffi;
Ennill profiad o weithio mewn tîm;
Cyfle i arddangos a gwella sgiliau presennol.
Roedd hyn o ddiddordeb i mi ar unwaith. Do, ni wnaethant dalu am y gwaith hwn, ond ni wnaethant fynnu unrhyw rwymedigaethau gennych chi, ac ni fydd yn ddiangen yn y portffolio. Felly, ysgrifennais at weinyddwr y gweinydd, a gofynnodd imi ysgrifennu bot a fydd yn dangos ystadegau'r chwaraewr yn World of Tanks.
Y cam paratoadol
Discrod
Cyn i ni ddechrau ysgrifennu ein bot, mae angen i ni ei greu ar gyfer Discord. Mae angen:
Rydyn ni'n mynd i "Fy Ngheisiadau" ac yn clicio ar y botwm "Ychwanegu cymhwysiad newydd", gan roi enw'r cais a dewis ei fath
Cadw ID y Cais
Meddalwedd
Mae rhyddid dewis eisoes. Mae rhywun yn defnyddio Visual Studio, rhywun Rider, mae rhywun yn bwerus ar y cyfan, ac yn ysgrifennu cod yn Vim (wedi'r cyfan, mae rhaglenwyr go iawn yn defnyddio'r bysellfwrdd yn unig, dde?). Fodd bynnag, er mwyn peidio â gweithredu'r API Discord, gallwch ddefnyddio'r llyfrgell C# answyddogol “DSharpPlus”. Gallwch ei osod naill ai o NuGet, neu trwy adeiladu'r ffynonellau eich hun o'r ystorfa.
I'r rhai nad ydyn nhw'n gwybod neu sydd wedi anghofio sut i osod cymwysiadau gan NuGet.Cyfarwyddiadau ar gyfer Visual Studio
Ewch i'r tab Prosiect - Rheoli Pecynnau NuGet;
Cliciwch ar yr adolygiad ac yn y maes chwilio rhowch “DSharpPlus”;
Dewis a gosod fframwaith;
PROFFIT!
Mae'r cam paratoi drosodd, gallwch chi fynd ymlaen i ysgrifennu'r bot.
Ysgrifennu rhesymeg
Ni fyddwn yn ystyried rhesymeg gyfan y cais, byddaf ond yn dangos sut i weithio gyda rhyng-gipio negeseuon gan y bot, a sut i weithio gyda'r API Wargaming.
Mae gweithio gyda'r bot Discord yn digwydd trwy'r MainTask Tasg async statig (llinyn[] args);
I alw swyddogaeth hon, yn y Prif angen i chi gofrestru
Lle mae tocyn yw tocyn eich bot.
Yna, trwy'r lambda, rydyn ni'n ysgrifennu'r gorchmynion angenrheidiol y dylai'r bot eu gweithredu:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Lle mae e.Author.Username yn cael llysenw'r defnyddiwr.
Fel hyn, pan fyddwch chi'n anfon unrhyw neges sy'n dechrau gyda &, bydd y bot yn eich cyfarch.
Ar ddiwedd y swyddogaeth hon, rhaid i chi ysgrifennu aros discord.ConnectAsync(); ac yn aros am Task.Delay(-1);
Bydd hyn yn caniatáu ichi weithredu gorchmynion yn y cefndir heb gymryd y prif edefyn.
Nawr mae angen i ni ddelio â'r API Wargaming. Mae popeth yn syml yma - ysgrifennwch geisiadau CURL, cael ymateb ar ffurf llinyn JSON, tynnu'r data angenrheidiol oddi yno a pherfformio triniaethau arnynt.
Enghraifft o weithio gyda WargamingAPI
public Player FindPlayer(string searchNickname)
{
//https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3search=nickname
urlRequest = resourceMan.GetString("url_find_player") + appID + "&search=" + searchNickname;
Player player = null;
string resultResponse = GetResponse(urlRequest);
dynamic parsed = JsonConvert.DeserializeObject(resultResponse);
string status = parsed.status;
if (status == "ok")
{
int count = parsed.meta.count;
if (count > 0)
{
player = new Player
{
Nickname = parsed.data[0].nickname,
Id = parsed.data[0].account_id
};
}
else
{
throw new PlayerNotFound("Игрок не найден");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("Минимум три символа требуется");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("Неверный поиск");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Пустой никнейм");
}
else
{
throw new Exception("Something went wrong.");
}
}
return player;
}
Sylw! Nid yw'n cael ei argymell yn llym i storio pob tocyn ac ID cais mewn testun clir! Ar y lleiaf, mae Discord yn gwahardd tocynnau o'r fath pan fyddant yn mynd i mewn i'r rhwydwaith byd-eang, ac ar y mwyaf, mae'r bot yn dechrau cael ei ddefnyddio gan ymosodwyr.
Defnyddio i VPS - gweinydd
Unwaith y byddwch wedi gorffen gyda'r bot, mae angen ei gynnal ar weinydd sy'n rhedeg yn gyson 24/7. Mae hyn oherwydd y ffaith pan fydd eich cais yn rhedeg, mae'r bot hefyd yn rhedeg. Cyn gynted ag y byddwch chi'n diffodd y cais, mae'ch bot yn cwympo i gysgu hefyd.
Mae llawer o weinyddion VPS yn bodoli yn y byd hwn, ar Windows ac ar Linux, fodd bynnag, yn y rhan fwyaf o achosion, mae'n llawer rhatach i'w cynnal ar Linux.
Ar y gweinydd Discord, fe'm cynghorwyd vscale.io, ac fe wnes i greu gweinydd rhithwir ar Ubuntu ar unwaith arno a llwytho'r bot i fyny. Ni fyddaf yn disgrifio sut mae'r wefan hon yn gweithio, ond byddaf yn mynd yn syth i'r gosodiadau bot.
Yn gyntaf oll, mae angen i chi osod y feddalwedd angenrheidiol a fydd yn rhedeg ein bot wedi'i ysgrifennu yn .NET Core. Disgrifir sut i wneud hyn yma.
Nesaf, mae angen i chi uwchlwytho'r bot i wasanaeth Git, fel GitHub ac ati, a'i glonio i weinydd VPS, neu lawrlwytho'ch bot mewn ffyrdd eraill. Sylwch mai dim ond consol fydd gennych chi, dim GUI. O gwbl.
Ar ôl i chi lawrlwytho'ch bot, mae angen i chi ei redeg. Ar gyfer hyn, mae angen:
Llongyfarchiadau! Mae eich bot yn rhedeg. Fodd bynnag, mae'r bot, yn anffodus, yn meddiannu'r consol, ac nid yw'n hawdd gadael y gweinydd VPS. Hefyd, rhag ofn y bydd gweinydd yn ailgychwyn, bydd yn rhaid i chi gychwyn y bot mewn ffordd newydd. Mae dwy ffordd allan o'r sefyllfa. Mae pob un ohonynt yn gysylltiedig â'r lansiad ar gychwyn gweinydd:
Ychwanegu sgript rhedeg i /etc/init.d
Creu gwasanaeth a fydd yn rhedeg wrth gychwyn.
Nid wyf yn gweld y pwynt i fyw arnynt yn fanwl, mae popeth yn cael ei ddisgrifio'n ddigon manwl ar y Rhyngrwyd.
Canfyddiadau
Rwy'n falch fy mod wedi ymgymryd â'r aseiniad hwn. Hwn oedd fy mhrofiad datblygu bot cyntaf, ac rwy'n falch fy mod wedi cael gwybodaeth newydd yn C #, a gweithio gyda Linux.