Discord bot written with .NET and Discord.Net. Solution name: Homunculus; main project: MarekMotykaBot.
| Project / path | Purpose |
|---|---|
MarekMotykaBot/ |
Bot executable: modules, services, resources |
ImfFlipAPI.APISource.Core/ |
ImgFlip API client library |
MarekMotykaBot.Tests/ |
xUnit tests |
deploy.sh |
Release publish, rsync to host, systemd restart |
Directory.Build.props |
Shared net10.0 TFM |
Directory.Packages.props |
Central package versions |
- .NET 10 SDK
- Discord bot token and any API credentials you enable (YouTube, Imgur, ImgFlip)
- For deploy: SSH access and a systemd unit on the target host
dotnet build Homunculus.slnx
dotnet test MarekMotykaBot.Tests/MarekMotykaBot.Tests.csprojCreate MarekMotykaBot/configuration.json (gitignored). Shape:
{
"prefix": ".",
"tokens": {
"discord": "",
"youtube": "",
"imgurClient": "",
"imgurSecret": "",
"destinationServerId": 0,
"destinationChannelId": 0
},
"credentials": {
"imgFlipUser": "",
"imgFlipPassword": ""
},
"configValues": {
"resourcePath": "/Resources/TextFiles/",
"UTfolderPath": "",
"streamAliasId": ""
}
}JSON under MarekMotykaBot/Resources/TextFiles/ is local runtime data (also gitignored via *.json).
- Copy
.env.templateto.envand fill in values. - Ensure the remote host already has
configuration.jsonand liveResources/TextFiles/(deploy does not overwrite them). - Run:
./deploy.shdeploy.sh publishes MarekMotykaBot (Release), rsyncs the publish output (excluding live JSON/config/logs), and restarts SERVICE_NAME via systemd.
See AGENTS.md for the short agent map and hard constraints.