Creu bot Discord ar .NET Core a'i leoli ar weinydd VPS

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

Creu bot Discord ar .NET Core a'i leoli ar weinydd VPS
Discrod
Cyn i ni ddechrau ysgrifennu ein bot, mae angen i ni ei greu ar gyfer Discord. Mae angen:

  1. Mewngofnodi i'r cyfrif Discord по ссылке
  2. Yn y tab "Ceisiadau", cliciwch ar y botwm "Cais Newydd" ac enwch y bot
  3. Mynnwch docyn bot trwy fewngofnodi i'ch bot a dod o hyd i'r tab “Bot” yn y rhestr “Settings”.
  4. Arbedwch y tocyn yn rhywle

Gemau Rhyfel

Hefyd, mae angen i chi greu cymhwysiad yn Wargaming i gael mynediad i'r Wargaming API. Yma, hefyd, mae popeth yn syml:

  1. Mewngofnodwch i'ch cyfrif Wargaming gan y ddolen hon
  2. 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
  3. 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

  1. Ewch i'r tab Prosiect - Rheoli Pecynnau NuGet;
  2. Cliciwch ar yr adolygiad ac yn y maes chwilio rhowch “DSharpPlus”;
  3. Dewis a gosod fframwaith;
  4. PROFFIT!

Mae'r cam paratoi drosodd, gallwch chi fynd ymlaen i ysgrifennu'r bot.

Ysgrifennu rhesymeg

Creu bot Discord ar .NET Core a'i leoli ar weinydd VPS

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

MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();

Nesaf, mae angen i chi gychwyn eich bot:

discord = new DiscordClient(new DiscordConfiguration
{
    Token = token,
    TokenType = TokenType.Bot,
    UseInternalLogHandler = true,
    LogLevel = LogLevel.Debug
});

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

Creu bot Discord ar .NET Core a'i leoli ar weinydd VPS

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:

  • Adfer pob dibyniaeth: adfer dotnet
  • Adeiladu cais: dotnet adeiladu name_project.sln -c Rhyddhau
  • Ewch i DLL adeiledig;
  • dotnet enw_of_file.dll

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.

Dolen i weinydd Discord. I'r rhai sy'n chwarae gemau Wargaming.
Dolen i'r ystorfa lle mae'r bot Discord wedi'i leoli.
Cyswllt i gadwrfa DSharpPlus.
Diolch am eich sylw!

Ffynhonnell: hab.com

Ychwanegu sylw