Skip to content

Plugins development no NO

ArchiBot edited this page Jul 8, 2025 · 9 revisions

Utvikling av programtillegg

ASF inkluderer stΓΈtte for egendefinerte plugins som kan lastes inn under kjΓΈretiden. Programtillegg lar deg tilpasse ASF-atferd, for eksempel ved Γ₯ legge til egendefinerte kommandoer, egendefinert handelslogikk eller hele integrasjon med tredjepartstjenester og APIer.

Denne siden beskriver ASF-tillegg fra utviklerperspektiv - skaper, vedlikeholde, publiserer og pΓ₯ samme mΓ₯te. Hvis du vil vise brukerens perspektiv, flytt **here ** i stedet.


Kjerne

Plugins er standard .NET biblioteker som definerer en klasse arving fra felles IPlugin grensesnitt deklarert i ASF. Du kan utvikle plugins helt uavhengig av mainline ASF og bruke dem pΓ₯ nytt i nΓ₯vΓ¦rende og fremtidige ASF-versjoner, SΓ₯ lenge intern ASF API forblir kompatibel. Utvidelsessystemet som brukes i ASF er basert pΓ₯ System. omposisjon, tidligere kjent som Managed Extensibility Framework slik at ASF kan oppdage og laste dine biblioteker under kjΓΈretid.


Komme i gang

Vi har forberedt ASF-PluginTemplate ** for deg, som du kan (og bΓΈr) bruke som en base for ditt plugin-prosjekt. Bruk av malen er ikke et krav (som du kan gjΓΈre alt fra bunnen av), men vi anbefaler sterkt Γ₯ hente den ettersom den kan starte utviklingen drastisk og skjΓ¦re pΓ₯ tid det kreves for Γ₯ fΓ₯ alle ting riktig. Bare sjekk ut malenREADME** av malen og sΓ₯ vil den veilede deg videre. Uansett vil vi dekke det grunnleggende nedenfor i tilfelle du ΓΈnsker Γ₯ starte fra grunnen, eller bli bedre kjent med konseptene som brukes i plugin-malen – du trenger vanligvis ikke gjΓΈre noe av det dersom du har bestemt deg for Γ₯ bruke plugin-malen.

Prosjektet ditt mΓ₯ vΓ¦re en standard . ET-bibliotek som minner om hensiktsmessig rammeverk for ditt mΓ₯l ASF-versjon, som angitt i compilation avsnittet.

Prosjektet mΓ₯ referere til hovedsamlingen "ArchiSteamFarm", enten den har bygget "ArchiSteamFarm. ll-biblioteket du har lastet ned som en del av frigivelsen, eller kildekodeprosjektet (f.eks. hvis du bestemte deg for Γ₯ legge til ASF-tre som en undermodul). Dette vil gi deg tilgang til og oppdag ASF-strukturer, metoder og egenskaper, spesielt kjerne IPlugin-grensesnittet som du mΓ₯ arve fra i neste trinn. Prosjektet mΓ₯ ogsΓ₯ referere til System.Composition.AttributedModeltil et minimum, som lar deg[Export]dinIPlugin` for ASF Γ₯ bruke. I tillegg til det, du kan ΓΈnske/vΓ¦re nΓΈdt til Γ₯ referere til andre vanlige biblioteker for Γ₯ tolke datastrukturene som er gitt deg i enkelte grensesnitt; men med mindre du trenger dem eksplisitt, vil det vΓ¦re nok for nΓ₯.

Hvis du gjorde alt ordentlig, vil din csproj være lik nedenfor:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net9.</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <! - Siden du laster inn plugin i ASF-prosessen, som allerede omfatter denne avhengigheten, IncludeAssets="kompilere" lar deg utelate fra den endelige utgangen -->
    <PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" Version="9.0.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="C:\\Path\To\ArchiSteamFarm\ArchiSteamFarm.csproj" ExcludeAssets="all" Private="false" />

    <! - Hvis en bygning med nedlastet DLL-binær, bruk dette i stedet for <ProjectReference> over -->
    <! - <Reference Include="ArchiSteamFarm" HintPath="C:\\Path\To\Downloaded\ArchiSteamFarm.dll" /> -->
  </ItemGroup>
</Project>

Fra kodesiden mΓ₯ plugin klassen arve fra grensesnittet IPlugin (enten eksplisitt, eller implisitt ved Γ₯ arve fra mer spesialisert grensesnitt, slik som IASF) og [Export(typeof(IPlugin)] for Γ₯ bli gjenkjent av ASF i lΓΈpet av lΓΈpetiden. Det mest bare eksemplet som gir det fΓΈlgende:

via System;
bruker System.Composition;
ved hjelp av System.Threading.Tasks;
ved bruk av ArchiSteamFarm;
ved bruk av ArchiSteamFarm.Plugins;

navnerom YourNamespace. ourPluginName;

[Export(typeof(IPlugin))]
offentlige forseglede klassen YourPluginName : IPlugin {
	intramufler navn => nameof(YourPluginName);
	VFpublic Version => typeof(YourPluginName). ssembly.GetName().Versjon;

	intramubel offentlig oppgave OnLoaded() {
		Ο„ ASF.ArchiLogger.LogGenericInfo("Hallo World!");

		ART retur T.CompletedaskTask;
	Aer}
}

Du mΓ₯ fΓΈrst kompilere den for Γ₯ kunne bruke utvidelsen. Du kan gjΓΈre det som enten fra din IDE, eller fra rotkatalogen til prosjektet via en kommando:

# Hvis prosjektet er frittstΓ₯ende (ingen trenger Γ₯ definere navn siden det er det eneste siden det er )
dotnet publisere -c "Release" -o "out"

# Hvis prosjektet er en del av ASF-kildetreet (for Γ₯ unngΓ₯ Γ₯ kompilere unΓΈdvendige deler)
dotnet publisere YourPluginName -c "Release" -o "ut"

EtterpΓ₯ er utvidelsen din klar for distribusjon. Det er opp til deg hvor nΓΈyaktig du ΓΈnsker Γ₯ distribuere og publisere utvidelsen din, men vi anbefaler Γ₯ lage et zip-arkiv hvor du vil sette din kompilerte plugin sammen med den**dependencies**. Denne mΓ₯ten brukeren vil rett og slett trenge Γ₯ pakke ut zip-arkivet ditt i en frittstΓ₯ende undermappe inne i sin plugins mappe og gjΓΈr ingenting annet.

Dette er det eneste grunnleggende scenarioet du kommer i gang. Vi har ExamplePlugin prosjekt som viser deg eksempelgrensesnitt og handlinger som du kan gjΓΈre i din egen plugin, inkludert nyttige kommentarer. Ta gjerne en titt pΓ₯ om du har lyst til Γ₯ lΓ¦re av en arbeidskode, eller oppdag ArchiSteamFarm. Sukker navneomrΓ₯det deg selv og henviser til den inkluderte dokumentasjonen for alle tilgjengelige alternativer. Vi vil ogsΓ₯ videreutvikle hovedbegrepene nedenfor for Γ₯ forklare dem bedre.

Hvis det i stedet for eksempel vil du lΓ¦re av virkelige prosjekter, finnes flere offisielle plugins utviklet av oss, for eksempel ItemsMatcher, MobileAuthenticator eller SteamTokenDumper. I tillegg til at det finnes ogsΓ₯ utvidelser som er utviklet av andre utviklere, i vΓ₯r third-party del.


API tilgjengelighet

ASF, bortsett fra hva du har tilgang til i grensesnittet, selv eksponerer deg for mange av sine interne API-er som du kan bruke av, for Γ₯ utvide funksjonaliteten. Hvis du for eksempel vil sende en slags ny forespΓΈrsel til Steam pΓ₯ nettet, trenger du ikke Γ₯ implementere alt fra bunnen av, Γ… hΓ₯ndtere alle problemene vi har mΓ₯ttet gjΓΈre fΓΈr deg. Bare bruk vΓ₯r boks. rchiWebHandler som allerede utsetter mange metoder som UrlWithSession() som du skal bruke hΓ₯ndtere alle ting med lavt nivΓ₯, for eksempel autentisering, ΓΈktoppdatering eller begrensning for deg. PΓ₯ samme mΓ₯te kan du sende nettforespΓΈrsler utenfor Steam-plattformen, som du kan bruke standard .NET HttpClient-klassen, men det er mye bedre idΓ© Γ₯ bruke Bot. rchiWebHandler.WebBrowser som er tilgjengelig for deg, som igjen tilbyr deg en nyttig hΓ₯nd, for eksempel med tanke pΓ₯ Γ₯ prΓΈve mislykkede forespΓΈrsler.

Vi har en svΓ¦rt Γ₯pen policy nΓ₯r det gjelder API-tilgjengelighet, sΓ₯ hvis du vil gjΓΈre bruk av noe som ASF-koden allerede omfatter, Γ…pne et problem og forklare i det planlagte brukstilfellet av vΓ₯r ASFs interne API. Vi vil sannsynligvis ikke ha noe igjen,sΓ₯ lenge brukssaken er fornuftig. Dette inkluderer ogsΓ₯ alle forslag i det nye IPlugin-grensesnittene som kan gi mening Γ₯ legges til for Γ₯ utvide eksisterende funksjonalitet.

Uavhengig av ASF API-tilgjengelighet stopper imidlertid ingenting deg fra f.eks Discord. et-biblioteket i programmet ditt og lage en bro mellom Discord bot og ASF-kommandoer, siden utvidelsen din ogsΓ₯ kan ha avhengigheter pΓ₯ seg selv. Mulighetene er uendelig, og vi gjΓΈr vΓ₯rt beste for Γ₯ gi deg sΓ₯ mye frihet og fleksibilitet som mulig i din innplugg, sΓ₯ det er ingen kunstige grenser pΓ₯ alt - din plugin er lastet inn i hovedprosessen ASF og kan gjΓΈre alt som er realistisk mulig Γ₯ gjΓΈre det innenfor C# kode.


API compatibility

Det er viktig Γ₯ understreke at ASF er en forbrukerapplikasjon og ikke et typisk bibliotek med fast API-overflate som du kan vΓ¦re avhengig av uten unntak. Det betyr at du ikke kan anta at din plugin nΓ₯r du er kompilert, vil fortsette Γ₯ arbeide med alle fremtidige ASF-utgivelser uansett, det er ganske enkelt umulig hvis vi ΓΈnsker Γ₯ fortsette Γ₯ utvikle programmet ytterligere. Manglende evne til Γ₯ tilpasse seg stadig pΓ₯gΓ₯ende Steam-endringer for kompatibilitet med bakover er bare ikke egnet for vΓ₯r sak. Dette bΓΈr vΓ¦re logisk for deg, men det er viktig Γ₯ fremheve den fakta.

Vi skal gjΓΈre vΓ₯rt beste for Γ₯ holde offentlige deler av ASF-arbeid og stabilitet, men vi vil ikke vΓ¦re redde for Γ₯ bryte kompatibiliteten hvis gode nok grunner oppstΓ₯r, Etter vΓ₯r **deprecation ** policy i prosessen. Dette er spesielt viktig for deg interne ASF-strukturer som er eksponert for deg som en del av ASF-infrastrukturen (f.eks. ArchiWebHandler) som kan forbedres (og dermed omskrives) som en del av ASF-forsterkninger i en av fremtidige versjoner. Vi vil gjΓΈre vΓ₯rt beste for Γ₯ informere deg pΓ₯ passende mΓ₯te i endringsloggene og inneholde passende advarsler under kjΓΈring om foreldet funksjoner. Vi har ikke tenkt Γ₯ skrive om alt for denne skrivingen, sΓ₯ du kan vΓ¦re ganske sikker pΓ₯ at den neste mindre ASF-versjonen ikke bare ΓΈdelegger plugin helt og holdent fordi den har et hΓΈyere versjonsnummer men Γ₯ ha ΓΈye med endringslogger, og verifikasjon av og til hvis alt fungerer fint er en svΓ¦rt god idΓ©.


Plugin avhengigheter

Programtillegget ditt vil inneholde minst to avhengigheter som standard, referanse ArchiSteamFarm for intern API (IPlugin som minimum), og PackageReference i System. omposition.AttributedModel som kreves for Γ₯ bli gjenkjent som ASF plugin til Γ₯ begynne med ([Export] klausul). I tillegg kan det inkludere flere avhengigheter i forhold til hva du har bestemt deg for i programtillegget (e. . Discord.Net bibliotek hvis du har bestemt deg for Γ₯ integrere med Discord).

Resultatet av byggverket ditt inkluderer din kjerne YourPluginName.dll biblioteket, samt alle avhengighetene som du har referert. Siden du utvikler en plugin til et allerede arbeidsprogram, trenger du ikke, og til og med shouldn't inkluderer avhengigheter som ASF allerede inkluderer, for eksempel ArchiSteamFarm, SteamKit2 eller AngleSharp. Striper ned din avslΓ₯ende avhengigheter som deles med ASF er ikke det absolutte kravet om at din plugin skal fungere, men gjΓΈr det pΓ₯ en dramatisk mΓ₯te vil kutte minnebruken og stΓΈrrelsen pΓ₯ utvidelsen din, sammen med Γ₯ ΓΈke prestasjonen, pΓ₯ grunn av at ASF vil dele sine egne avhengigheter med deg, og skal kun laste de bibliotekene som de ikke vet om seg selv.

Generelt er det en anbefalt praksis Γ₯ inkludere bare disse bibliotekene som ASF enten ikke innbefatter eller inkluderer i den feil/inkompatible versjonen. Eksempler pΓ₯ dette er Γ₯penbart YourPluginName.dll, men for eksempel ogsΓ₯ Discord.Net.dll hvis du bestemte deg for Γ₯ avhenge av det, da ASF ikke inkluderer det selv. Bundling av biblioteker som deles med ASF kan fortsatt gi mening hvis du vil sΓΈrge for API-kompatibilitet (f.eks. Γ₯ vΓ¦re sikker pΓ₯ at AngleSharp som du er avhengig av i utvidelsen din alltid vil vΓ¦re i versjon X og ikke den som ASF leveres med), men gjΓΈr Γ₯penbart som kommer med en pris av ΓΈkt hukommelse/stΓΈrrelse og dΓ₯rligere ytelse, og bΓΈr derfor vurderes nΓΈye.

Hvis du vet at den avhengigheten du trenger er inkludert i ASF, du kan merke den med IncludeAssets="compile" slik vi viste deg i eksempelet csproj over. Dette vil gi beskjed om at kompilatoren skal unngΓ₯ Γ₯ publisere selve referert biblioteket, da ASF allerede inkluderer det der. Likeledes, merk at vi refererer ASF-prosjektet med ExcludeAssets="all" Private="false" som fungerer pΓ₯ en svΓ¦rt lignende mΓ₯te – og ber komprimereren om Γ₯ ikke produsere ASF-filer (som brukeren allerede har dem). Dette gjelder bare nΓ₯r du refererer til ASF-prosjekt, siden dersom du refererer til et dlll-bibliotek sΓ₯ produserer du ikke ASF-filer som en del av pluginen.

Hvis du er forvirret av ovennevnte utsagn, og du ikke vet bedre, sjekk hvilke dlll-biblioteker som er inkludert i ASF-generiske. ip-pakken og sΓΈrg for at utvidelsen din kun inneholder de som ikke er en del av den ennΓ₯. Dette blir bare YourPluginName.dll for de mest enkle plugins. Dersom du fΓ₯r problemer under kjΓΈring nΓ₯r det gjelder noen biblioteker, inkluderer du ogsΓ₯ de berΓΈrte bibliotekene. Hvis alt annet mislykkes kan du alltid bestemme deg for Γ₯ samle alt.


Native avhengigheter

Native avhengigheter genereres som en del av OS-spesifikke bygninger, ettersom det ikke er noen . ET kjΓΈretid tilgjengelig pΓ₯ verten og ASF kjΓΈrer gjennom sin egen .NET runtime som er samlet som en del av OS-spesifikk bygning. For Γ₯ minimalisere byggestΓΈrrelsen, gjΓΈr ASF-trimmene at de innebygde avhengighetene kun kan inneholde koden som muligens kan nΓ₯s i programmet, som effektivt kutter de ubrukte delene i lΓΈpetiden. Dette kan skape et potensielt problem for deg med hensyn til din utvidelse, Hvis du plutselig finner ut selv i en situasjon hvor utvidelsen din er avhengig av noe. ET-funksjon som ikke blir brukt i ASF, og derfor kan ikke OS-spesifikke versjoner kjΓΈre den ordentlig, som vanligvis kaster System.MissingMethodException eller System.Reflection.Reflection.ReflectionTypeLoadException i prosessen. Etter hvert som utvidelsen vokser i stΓΈrrelse og blir mer og mer kompleks, fΓΈr eller senere vil du treffe overflaten som ikke er dekket av vΓ₯r OS-spesifikke bygning.

Dette er aldri et problem med generiske bygg, fordi de aldri hΓ₯ndterer innebygde avhengigheter pΓ₯ det fΓΈrste stedet (som de har full arbeidstid pΓ₯ verten, utfΓΈre ASF). Dette er grunnen til at det er en anbefalt praksis Γ₯ **bruke utvidelsen din i generiske versjoner eksklusiv men selvsagt har den egen nedsiden av Γ₯ kutte utvidelsen fra brukere som kjΓΈrer OS-spesifikke versjoner av ASF. Hvis du lurer pΓ₯ om problemet er relatert til vanlige avhengigheter, du kan ogsΓ₯ bruke denne metoden for verifisering, last inn utvidelsen i ASF-generiske versjoner og se om den fungerer. Hvis det gjΓΈr det, har du plugin avhengigheter som er dekket, og det er de innebygde avhengighetene som forΓ₯rsaker problemer.

Som en del av vΓ₯re OS-spesifikke bygg mΓ₯tte vi dessverre velge hardt mellom publisering av hele rulletiden. og bestemte seg for Γ₯ klippe den ut av ubrukte funksjoner, slik at den kan bygges over 80 MB mindre enn i den hele. Vi har plukket det andre alternativet, og det er dessverre umulig for deg Γ₯ inkludere de manglende rundetidsfunksjonene sammen med pluginen. Hvis prosjektet ditt krever tilgang for Γ₯ kjΓΈre tidsfunksjoner som kan tΓΈmmes, mΓ₯ du inkludere fullt . ET kjΓΈretid som du er avhengig av, og som betyr Γ₯ kjΓΈre din plugin i generisk ASF-smak. Du kan ikke kjΓΈre utvidelsen i OS-spesifikke bygg, da disse versjonene mangler bare en runtidsfunksjon som du trenger, og . ET kjΓΈretid da av nΓ₯ ikke er i stand til Γ₯ "merge" innebygd avhengighet du kunne ha levert med vΓ₯r egen. Kanskje forbedres en dag i fremtiden, men vil det pr. nΓ₯ ikke vΓ¦re mulig.

ASFs OS-spesifikke versjoner inkluderer minimum "Admin" for tilleggsfunksjonalitet som er nΓΈdvendig for Γ₯ kjΓΈre vΓ₯re offisielle utvidelser. Bortsett fra dette som mulig utvider dette ogsΓ₯ overflaten til ekstra avhengigheter som kreves for de mest grunnleggende utvidelsene. Ikke alle plugins mΓ₯ derfor bekymre seg for at innebygde avhengigheter skal begynne med - kun de som gΓ₯r utover det ASF og vΓ₯re offisielle plugins trenger direkte. Dette gjΓΈres som ekstra, siden vi mΓ₯ regne med flere native avhengigheter selv for vΓ₯r egen brukssak, uansett Vi kan i tillegg sende dem direkte til ASF, slik at de blir tilgjengelige, og dermed lettere Γ₯ dekke, ogsΓ₯ for deg. Dessverre er dette ikke alltid nok, og da utvidelsen blir stΓΈrre og mer kompleks, ΓΈker sannsynligheten for Γ₯ komme til trimmet funksjonalitet. Derfor anbefaler vi vanligvis at du kjΓΈrer dine egendefinerte plugins pΓ₯ generic ASF-smak ekskludert. Du kan fremdeles verifisere at OS-spesifikk versjon av ASF har alt som din plugin trenger for dens funksjonalitet – men siden det endres i dine oppdateringer, i tillegg til vΓ₯r, den kan vΓ¦re vanskelig Γ₯ holde fast.

Noen ganger er det mulig Γ₯ Β«slappe avΒ» funksjoner ved enten Γ₯ bruke alternative alternativer eller Γ₯ implementere dem i utvidelsen. Dette er imidlertid ikke alltid mulig eller levedyktig, spesielt hvis den manglende funksjonen kommer fra tredjepartsavhengigheter som du inkluderer som en del av utvidelsen din. Du kan alltid prΓΈve Γ₯ kjΓΈre din plugin i OS-spesifikk versjon og forsΓΈke Γ₯ gjΓΈre det til, men det kan bli for mye pΓ₯ lang sikt, spesielt hvis du vil fra koden din til bare Γ₯ arbeide, i stedet for Γ₯ kjempe med ASF-overflate.


Automatiske oppdateringer

ASF tilbyr deg to grensesnitt for Γ₯ implementere automatiske oppdateringer i ditt programtillegg:

  • IGitHubPluginUpdates gjΓΈr det enkelt Γ₯ implementere GitHub-baserte oppdateringer pΓ₯ lignende generelle ASF-oppdateringsmekanisme
  • IPluginUpdater som gir deg funksjonalitet pΓ₯ lavere nivΓ₯ som tillater egendefinerte oppdateringsmekanismer, hvis du trenger noe mer kompleks

Minste sjekkliste for ting som kreves for at oppdateringer skal virke:

  • Du mΓ₯ erklΓ¦re RepositoryName, som definerer hvor oppdateringene trekkes fra.
  • Du mΓ₯ bruke tagger og utgivelser levert av GitHub. Tag mΓ₯ vΓ¦re i format som lesbar til en plugin-versjon, f.eks 1.0.0.0.
  • Versjon-egenskapen til utvidelsen mΓ₯ matche taggen som den kommer fra. Dette betyr at binΓ¦r tilgjengelig under taggen 1.2.3.4 mΓ₯ presentere seg som 1.2.3.4.
  • Hver tag skal ha passende utgivelse tilgjengelig pΓ₯ GitHub med zip filrelease ressursen som inkluderer dine binΓ¦re tilleggsfiler. De binΓ¦re filene som inkluderer dine IPlugin-klasser skal vΓ¦re tilgjengelige i rotmappen i zip-filen.

Det vil tillate ordningen i ASF Γ₯

  • LΓΈs gjeldende versjon av din plugin, for eksempel 1.0.1.
  • Bruk GitHub API for Γ₯ hente nyeste tag som er tilgjengelig i RepositoryName repo, f.eks. 1.0.2.
  • AvgjΓΈr at 1.0.2 > 1.0.1, sjekk av 1.0.2 taggen for Γ₯ finne .zip filen med utvidelsen oppdatering.
  • Last ned filen .zip og legg den ut i mappen som medfΓΈlgende YourPlugin.dl fΓΈr.
  • Start ASF pΓ₯ nytt for Γ₯ laste pluginen din i 1.0.2 versjonen.

Flere notater:

  • Oppdatering av plugin kan kreve passende ASF konfigurasjonsverdier, nemlig PluginsUpdateMode og/eller PluginsUpdateList.
  • VΓ₯r plugin-mal inkluderer alt du trenger, bare rename utvidelsen til riktige verdier, og det vil fungere ut av boksen.
  • Du kan bruke en kombinasjon av siste utgivelse samt forhΓ₯ndslanser, de vil bli brukt som per UpdateChannel som brukeren har definert.
  • Det finnes CanUpdate boolsk egenskap du kan overstyre for deaktivering/aktivering av plugins oppdateringsfunksjoner pΓ₯ siden din. hvis du for eksempel vil hoppe over oppdateringer midlertidig, eller gjennom en annen grunn.
  • Det er mulig Γ₯ ha flere zip-filer i utgivelsen hvis du ΓΈnsker Γ₯ mΓ₯lrette forskjellige ASF-versjoner. Se GetTargetReleaseAsset() remarks. For eksempel kan du ha MyPlugin-V6-0.zip i tillegg til MyPlugin.zip, som vil forΓ₯rsake ASF i versjon V6. .x for Γ₯ velge den fΓΈrste, mens alle andre ASF-versjoner vil bruke den andre.
  • Hvis ovennevnte er ikke tilstrekkelig for deg og du krever egendefinert logikk for Γ₯ velge riktig . ip-filen, du kan overstyre GetTargetReleaseAsset()-funksjonen og gi artifaktet til ASF som skal brukes.
  • Hvis utvidelsen din trenger Γ₯ gjΓΈre litt ekstra arbeid fΓΈr/etter oppdatering, kan du overstyre OnPluginUpdateProceeding() og/eller OnPluginUpdateFinished()-metodene.

Dette grensesnittet lar deg implementere egendefinert logikk for oppdateringer hvis en hvilken som helst grunn IGithubPluginUpdates er ikke nok for deg, for eksempel fordi du har tagger som ikke analyserer til versjoner, eller fordi du ikke bruker GitHub plattform i det hele tatt.

Det er en enkelt GetTargetReleaseURL()-funksjonen du kan overstyre, noe som forventer at du Uri? vil oppdatere din plugin plassering. ASF gir dere noen kjernevariabler som relaterer seg til konteksten funksjonen ble kalt med, men annet enn det, du er ansvarlig for Γ₯ implementere alt du trenger i den funksjonen og oppgi ASF nettadressen som skal brukes. eller "null" hvis oppdateringen ikke er tilgjengelig.

Annet enn at det er lik GitHub oppdateringer, hvor URL-adressen skal peke til en . ip-filen med de binΓ¦re filene som finnes i rotmappen. Du har ogsΓ₯ metodene OnPluginUpdateProceeding() og OnPluginUpdateFinished().

Clone this wiki locally