base on OpenMod .NET Plugin Framework # OpenMod [![Discord](https://img.shields.io/discord/666327627124047872?label=Discord&style=for-the-badge)](https://discord.com/invite/jRrCJVm) OpenMod is a plugin framework for .NET. It supports authorization, plugin configurations, internalization, command handling and much more. OpenMod can be used for games, bot frameworks, web servers or anything else and has official implementations for Unturned, Rust (WIP) and a standalone console. For a list of available plugins, visit [openmod-plugins](https://openmod.github.io/openmod-plugins). ## Features OpenMod is based on modern C# code and best practices. - Modern API for plugin development with C# and Unity best practices - Plugin installation with [NuGet](https://nuget.org) - Can self update with NuGet - Based on [.NET Generic Host](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host) - IoC and Dependency Injection using Autofac - Configure OpenMod and plugins with yaml configurations, environment variables, commandline arguments, etc. - Serilog for logging, including rich configuration options via logging.yml ## Getting Started To get started, visit the [OpenMod Documentation](https://openmod.github.io/openmod-docs/). If you would like to install OpenMod, installation guides for the following platforms are available: - [Unturned](https://openmod.github.io/openmod-docs/userdoc/installation/unturned.html) If you want to make plugins for OpenMod, you can get started by reading the [Making your first plugin](https://openmod.github.io/openmod-docs/devdoc/guides/getting-started.html) page. ## Supported Games Currently Unturned is the only supported game. More games might follow in the future. OpenMod can work side-by-side with RocketMod. ## License See [LICENSE](LICENSE) file for more information. ## Build Status ### Framework [![OpenMod.API](https://github.com/openmod/OpenMod/workflows/OpenMod.API/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.API) [![OpenMod.Bootstrapper](https://github.com/openmod/OpenMod/workflows/OpenMod.Bootstrapper/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Bootstrapper) [![OpenMod.NuGet](https://github.com/openmod/OpenMod/workflows/OpenMod.NuGet/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.NuGet) [![OpenMod.Core](https://github.com/openmod/OpenMod/workflows/OpenMod.Core/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Core) [![OpenMod.Runtime](https://github.com/openmod/OpenMod/workflows/OpenMod.Runtime/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Runtime) [![OpenMod.Analyzers](https://github.com/openmod/OpenMod/workflows/OpenMod.Analyzers/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Analyzers) [![OpenMod.Templates](https://github.com/openmod/OpenMod/workflows/OpenMod.Templates/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Templates) [![OpenMod.EntityFrameworkCore](https://github.com/openmod/OpenMod/workflows/OpenMod.EntityFrameworkCore/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.EntityFrameworkCore) ### Extensions [![OpenMod.Extensions.Games.Abstractions](https://github.com/openmod/OpenMod/workflows/OpenMod.Extensions.Games.Abstractions/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Extensions.Games.Abstractions) [![OpenMod.Extensions.Economy.Abstractions](https://github.com/openmod/OpenMod/workflows/OpenMod.Extensions.Economy.Abstractions/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Extensions.Economy.Abstractions) ### Standalone [![OpenMod.Standalone](https://github.com/openmod/OpenMod/workflows/OpenMod.Standalone/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Standalone) ### UnityEngine [![OpenMod.UnityEngine.Redist](https://github.com/openmod/OpenMod/workflows/OpenMod.UnityEngine.Redist/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.UnityEngine.Redist) [![OpenMod.UniTask](https://github.com/openmod/OpenMod/workflows/OpenMod.UniTask/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.UniTask) [![OpenMod.UnityEngine](https://github.com/openmod/OpenMod/workflows/OpenMod.UnityEngine/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.UnityEngine) ### Unturned [![OpenMod.Unturned.Redist](https://github.com/openmod/OpenMod/workflows/OpenMod.Unturned.Redist/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Unturned.Redist) [![OpenMod.Unturned](https://github.com/openmod/OpenMod/workflows/OpenMod.Unturned/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Unturned) [![OpenMod.Unturned.Module](https://github.com/openmod/OpenMod/workflows/OpenMod.Unturned.Module/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Unturned.Module) ### Rust [![OpenMod.Rust.Redist](https://github.com/openmod/OpenMod/workflows/OpenMod.Rust.Redist/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Rust.Redist) [![OpenMod.Rust](https://github.com/openmod/OpenMod/workflows/OpenMod.Rust/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Rust) [![OpenMod.Rust.Oxide.Redist](https://github.com/openmod/OpenMod/workflows/OpenMod.Rust.Oxide.Redist/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Rust.Oxide.Redist) [![OpenMod.Rust.Oxide](https://github.com/openmod/OpenMod/workflows/OpenMod.Rust.Oxide/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Rust.Oxide) [![OpenMod.Rust.Oxide.Extension](https://github.com/openmod/OpenMod/workflows/OpenMod.Rust.Oxide.Extension/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Rust.Oxide.Extension) [![OpenMod.Rust.Oxide.PermissionLink](https://github.com/openmod/OpenMod/workflows/OpenMod.Rust.Oxide.PermissionLink/badge.svg)](https://github.com/openmod/OpenMod/actions?query=workflow%3AOpenMod.Rust.Oxide.PermissionLink) ## Code of Conduct This project uses the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/about/policies/code-of-conduct). ## .NET Foundation This project is supported by the [.NET Foundation](https://dotnetfoundation.org). ", Assign "at most 3 tags" to the expected json: {"id":"3425","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"