Compare commits

...
Sign in to create a new pull request.

96 commits

Author SHA1 Message Date
renovate[bot]
a5cccea57e
chore(deps): update dependency htmlsanitizer to 9.0.886 2025-09-10 21:09:54 +00:00
Lala Sabathil
5c4fba0757
chore(deps): update dotnet monorepo (#568)
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
|
[Microsoft.CodeAnalysis.CSharp](https://redirect.github.com/dotnet/roslyn)
| `4.13.0` -> `4.14.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/Microsoft.CodeAnalysis.CSharp/4.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/Microsoft.CodeAnalysis.CSharp/4.13.0/4.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[Microsoft.CodeAnalysis.Scripting](https://redirect.github.com/dotnet/roslyn)
| `4.13.0` -> `4.14.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/Microsoft.CodeAnalysis.Scripting/4.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/Microsoft.CodeAnalysis.Scripting/4.13.0/4.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [System.Drawing.Common](https://redirect.github.com/dotnet/winforms) |
`9.0.4` -> `9.0.9` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/System.Drawing.Common/9.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/System.Drawing.Common/9.0.4/9.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [System.Text.Json](https://dot.net/)
([source](https://redirect.github.com/dotnet/runtime)) | `9.0.4` ->
`9.0.9` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/System.Text.Json/9.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/System.Text.Json/9.0.4/9.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>dotnet/winforms (System.Drawing.Common)</summary>

###
[`v9.0.9`](https://redirect.github.com/dotnet/winforms/releases/tag/v9.0.9):
.NET 9.0.9

[Release](https://redirect.github.com/dotnet/core/releases/tag/v9.0.9)

#### What's Changed

- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;13764](https://redirect.github.com/dotnet/winforms/pull/13764)
- Update branding to 9.0.9 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;13775](https://redirect.github.com/dotnet/winforms/pull/13775)
- Merging internal commits for release/9.0 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;13785](https://redirect.github.com/dotnet/winforms/pull/13785)
- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;13788](https://redirect.github.com/dotnet/winforms/pull/13788)
- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;13790](https://redirect.github.com/dotnet/winforms/pull/13790)
- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;13814](https://redirect.github.com/dotnet/winforms/pull/13814)

**Full Changelog**:
<https://github.com/dotnet/winforms/compare/v9.0.8...v9.0.9>

###
[`v9.0.6`](https://redirect.github.com/dotnet/winforms/releases/tag/v9.0.6):
.NET 9.0.6

### .NET 9.0.6

#### Bug Fixes

- **Fix InvalidOperationException when closing a dialog with a focused
DataGridView control**\
Resolves an issue where closing a dialog that had a DataGridView control
focused could throw an `InvalidOperationException`. This fix ensures
dialogs close smoothly without unexpected errors, improving application
stability.\
[#&#8203;13348](https://redirect.github.com/dotnet/winforms/pull/13348)

- **Fix false-positive WinForms Analyzer diagnostics**\
Addresses a problem where the WinForms Analyzer was incorrectly flagging
valid code as problematic. This update reduces noise from false-positive
diagnostics, making it easier for developers to identify real issues.\
[#&#8203;13411](https://redirect.github.com/dotnet/winforms/pull/13411)

- **Fix incorrect Color value in PageSettings**\
Corrects an issue where the `Color` value in `PageSettings` was not set
or retrieved properly. This ensures that page color settings behave as
expected during printing or preview scenarios.\
[#&#8203;13389](https://redirect.github.com/dotnet/winforms/pull/13389)

- **Fix PropertyGrid not updating property list with
RefreshProperties.All**\
Resolves a regression where changing properties with
`RefreshProperties.All` did not requery and update the property list in
the PropertyGrid in .NET 9 (worked in .NET 8). This fix restores
expected PropertyGrid behavior for dynamic property updates.\
[#&#8203;13356](https://redirect.github.com/dotnet/winforms/pull/13356)

- **Fix Baseline SnapLines not appearing in DesignSurface**\
Addresses an issue where Baseline SnapLines were missing in the
DesignSurface, making it difficult to align controls visually during
design-time. This fix restores the visual alignment aids for improved
designer usability.\
[#&#8203;13349](https://redirect.github.com/dotnet/winforms/pull/13349)

#### Dependency Updates

- **Update dependencies from dotnet/arcade**\
Updates internal build and infrastructure dependencies from the
dotnet/arcade repository, ensuring the project benefits from the latest
improvements, bug fixes, and security updates in the build tooling.\

[#&#8203;13380](https://redirect.github.com/dotnet/winforms/pull/13380)\

[#&#8203;13414](https://redirect.github.com/dotnet/winforms/pull/13414)\
[#&#8203;13418](https://redirect.github.com/dotnet/winforms/pull/13418)

#### Miscellaneous

- **Update branding to 9.0.6**\
Updates the version branding throughout the repository to reflect the
9.0.6 release, ensuring consistency in versioning and release
identification.\
[#&#8203;13424](https://redirect.github.com/dotnet/winforms/pull/13424)

- **Merge internal commits for release/9.0**\
Incorporates various internal commits into the release/9.0 branch,
ensuring the latest internal changes and improvements are included in
this release.\
[#&#8203;13452](https://redirect.github.com/dotnet/winforms/pull/13452)

***

This summary is generated and may contain inaccuracies. For complete
details, please review the linked pull requests.

Full Changelog:
[v9.0.5...v9.0.6](https://redirect.github.com/dotnet/winforms/compare/v9.0.5...v9.0.6)

###
[`v9.0.5`](https://redirect.github.com/dotnet/winforms/releases/tag/v9.0.5):
.NET 9.0.5

[Release](https://redirect.github.com/dotnet/core/releases/tag/v9.0.5)

#### What's Changed

- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;13150](https://redirect.github.com/dotnet/winforms/pull/13150)
- Update branding to 9.0.5 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;13224](https://redirect.github.com/dotnet/winforms/pull/13224)
- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;13241](https://redirect.github.com/dotnet/winforms/pull/13241)
- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;13272](https://redirect.github.com/dotnet/winforms/pull/13272)
- Merging internal commits for release/9.0 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;13268](https://redirect.github.com/dotnet/winforms/pull/13268)

**Full Changelog**:
<https://github.com/dotnet/winforms/compare/v9.0.4...v9.0.5>

</details>

<details>
<summary>dotnet/runtime (System.Text.Json)</summary>

###
[`v9.0.9`](https://redirect.github.com/dotnet/runtime/compare/v9.0.8...v9.0.9)

###
[`v9.0.8`](https://redirect.github.com/dotnet/runtime/releases/tag/v9.0.8):
.NET 9.0.8

[Release](https://redirect.github.com/dotnet/core/releases/tag/v9.0.8)

##### What's Changed

- \[automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;116514](https://redirect.github.com/dotnet/runtime/pull/116514)
- \[release/9.0] Disable all MT tests on CI by
[@&#8203;ilonatommy](https://redirect.github.com/ilonatommy) in
[#&#8203;116747](https://redirect.github.com/dotnet/runtime/pull/116747)
- \[9.0] Revert squash commit and pulls release/9.0 again by
[@&#8203;jozkee](https://redirect.github.com/jozkee) in
[#&#8203;116764](https://redirect.github.com/dotnet/runtime/pull/116764)
- \[release/9.0-staging] Backport "Dispose Xunit ToolCommand" by
[@&#8203;ilonatommy](https://redirect.github.com/ilonatommy) in
[#&#8203;116685](https://redirect.github.com/dotnet/runtime/pull/116685)
- \[release/9.0-staging] Skip SSL key log test for OpenSSL 3.5+ by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;116687](https://redirect.github.com/dotnet/runtime/pull/116687)
- \[release/9.0-staging] Fix absolute path check when loading
hostfxr/hostpolicy/coreclr by
[@&#8203;elinor-fung](https://redirect.github.com/elinor-fung) in
[#&#8203;116775](https://redirect.github.com/dotnet/runtime/pull/116775)
- Update openssl dependency for SLES by
[@&#8203;NikolaMilosavljevic](https://redirect.github.com/NikolaMilosavljevic)
in
[#&#8203;116922](https://redirect.github.com/dotnet/runtime/pull/116922)
- \[9.0] Backport 115546 FLS initialization fix to 9. by
[@&#8203;mangod9](https://redirect.github.com/mangod9) in
[#&#8203;116872](https://redirect.github.com/dotnet/runtime/pull/116872)
- \[release/9.0-staging] Update dependencies from dotnet/roslyn by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;117137](https://redirect.github.com/dotnet/runtime/pull/117137)
- \[release/9.0-staging] Update dependencies from dotnet/icu by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;116681](https://redirect.github.com/dotnet/runtime/pull/116681)
- \[release/9.0-staging] Update dependencies from dotnet/cecil by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;116455](https://redirect.github.com/dotnet/runtime/pull/116455)
- \[release/9.0-staging] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;116948](https://redirect.github.com/dotnet/runtime/pull/116948)
- \[release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;115596](https://redirect.github.com/dotnet/runtime/pull/115596)
- \[release/9.0-staging] Update dependencies from
dotnet/source-build-reference-packages by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;115588](https://redirect.github.com/dotnet/runtime/pull/115588)
- \[release/9.0-staging] Map version for Tahoe compatibility. by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;116641](https://redirect.github.com/dotnet/runtime/pull/116641)
- \[9.0] Update CI OSes by
[@&#8203;richlander](https://redirect.github.com/richlander) in
[#&#8203;115503](https://redirect.github.com/dotnet/runtime/pull/115503)
- Update branding to 9.0.8 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;117283](https://redirect.github.com/dotnet/runtime/pull/117283)
- \[release/9.0-staging] Update dependencies from dotnet/sdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;116683](https://redirect.github.com/dotnet/runtime/pull/116683)
- Disable odbc tests on net9 interpreter by
[@&#8203;BrzVlad](https://redirect.github.com/BrzVlad) in
[#&#8203;117245](https://redirect.github.com/dotnet/runtime/pull/117245)
- \[release/9.0-staging] Update dependencies from dotnet/cecil by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;117228](https://redirect.github.com/dotnet/runtime/pull/117228)
- \[release/9.0-staging] Update dependencies from dotnet/icu by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;117257](https://redirect.github.com/dotnet/runtime/pull/117257)
- \[release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;117184](https://redirect.github.com/dotnet/runtime/pull/117184)
- \[release/9.0-staging] Update dependencies from dotnet/runtime-assets
by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;116664](https://redirect.github.com/dotnet/runtime/pull/116664)
- \[release/9.0-staging] Update dependencies from dotnet/xharness by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;116908](https://redirect.github.com/dotnet/runtime/pull/116908)
- \[release/9.0] Update dependencies from dotnet/emsdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;116626](https://redirect.github.com/dotnet/runtime/pull/116626)
- \[automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;117296](https://redirect.github.com/dotnet/runtime/pull/117296)
- \[release/9.0-staging]\[wbt] Prevent `InvalidOperationException` on
`TestOutputHelper` logging. by
[@&#8203;ilonatommy](https://redirect.github.com/ilonatommy) in
[#&#8203;116916](https://redirect.github.com/dotnet/runtime/pull/116916)
- \[release/9.0-staging] Harden `Ping_TimedOut_*` tests by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;116630](https://redirect.github.com/dotnet/runtime/pull/116630)
- Merging internal commits for release/9.0 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;117442](https://redirect.github.com/dotnet/runtime/pull/117442)
- \[release/9.0-staging] Fix ILogB for subnormal values by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;116973](https://redirect.github.com/dotnet/runtime/pull/116973)
- \[release/9.0-staging] Fix ordering issue in interface trimming by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;114509](https://redirect.github.com/dotnet/runtime/pull/114509)
- \[release/9.0-staging]\[mono]\[gc] Fix gc descriptor computation for
InlineArray structs by
[@&#8203;BrzVlad](https://redirect.github.com/BrzVlad) in
[#&#8203;116951](https://redirect.github.com/dotnet/runtime/pull/116951)
- \[release/9.0-staging] Fix few RandomAccess.Write edge case bugs by
[@&#8203;adamsitnik](https://redirect.github.com/adamsitnik) in
[#&#8203;109646](https://redirect.github.com/dotnet/runtime/pull/109646)
- \[automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;117471](https://redirect.github.com/dotnet/runtime/pull/117471)
- \[release/9.0-staging] Update dependencies from dotnet/xharness by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;117594](https://redirect.github.com/dotnet/runtime/pull/117594)
- \[release/9.0-staging] Update dependencies from dotnet/sdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)\[bot]
in
[#&#8203;117595](https://redirect.github.com/dotnet/runtime/pull/117595)
- \[manual] Merge release/9.0-staging into release/9.0 by
[@&#8203;tarekgh](https://redirect.github.com/tarekgh) in
[#&#8203;117634](https://redirect.github.com/dotnet/runtime/pull/117634)

**Full Changelog**:
<https://github.com/dotnet/runtime/compare/v9.0.7...v9.0.8>

###
[`v9.0.7`](https://redirect.github.com/dotnet/runtime/releases/tag/v9.0.7):
.NET 9.0.7

[Release](https://redirect.github.com/dotnet/core/releases/tag/v9.0.7)

##### What's Changed

- \[release/9.0-staging] Fix crash during Async Break when APC and CET
are enabled by [@&#8203;thaystg](https://redirect.github.com/thaystg) in
[#&#8203;114932](https://redirect.github.com/dotnet/runtime/pull/114932)
- \[release/9.0-staging] \[STJ] Account for F#
CompilationMappingAttribute now supporting multiple declarations. by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;115076](https://redirect.github.com/dotnet/runtime/pull/115076)
- \[release/9.0-staging]\[wasm]\[interpreter] Fix PackedSimd interpreter
intrinsics by [@&#8203;lewing](https://redirect.github.com/lewing) in
[#&#8203;114218](https://redirect.github.com/dotnet/runtime/pull/114218)
- \[release/9.0-staging] JIT: Fix invalid removal of explicit zeroing in
methods without .localsinit by
[@&#8203;jakobbotsch](https://redirect.github.com/jakobbotsch) in
[#&#8203;115568](https://redirect.github.com/dotnet/runtime/pull/115568)
- \[release/9.0-staging] throw an exception instead of infinite loop in
`sort_mark_list` by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;115529](https://redirect.github.com/dotnet/runtime/pull/115529)
- \[release/9.0-staging] \[DNS] Ignore ObjectDisposedException on
CancellationToken Callback by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;115840](https://redirect.github.com/dotnet/runtime/pull/115840)
- Revert "\[release/9.0-staging] Fix crash during Async Break when APC
and CET are enabled" by
[@&#8203;thaystg](https://redirect.github.com/thaystg) in
[#&#8203;116015](https://redirect.github.com/dotnet/runtime/pull/116015)
- \[release/9.0-staging] Fix SysV first/second return register GC info
mismatch by
[@&#8203;jakobbotsch](https://redirect.github.com/jakobbotsch) in
[#&#8203;116206](https://redirect.github.com/dotnet/runtime/pull/116206)
- \[release/9.0-staging] Fix PipeStream leak on Windows when pipe is
disposed with a pending operation by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;116188](https://redirect.github.com/dotnet/runtime/pull/116188)
- \[release/9.0] Fix edge cases in Tarjan GC bridge (Android) by
[@&#8203;filipnavara](https://redirect.github.com/filipnavara) in
[#&#8203;114682](https://redirect.github.com/dotnet/runtime/pull/114682)
- \[release/9.0-staging] Revert change to follow symlinks of dotnet host
by [@&#8203;github-actions](https://redirect.github.com/github-actions)
in
[#&#8203;116244](https://redirect.github.com/dotnet/runtime/pull/116244)
- Update branding to 9.0.7 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;116312](https://redirect.github.com/dotnet/runtime/pull/116312)
- \[release/9.0-staging] Fix generation of minidump by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;115738](https://redirect.github.com/dotnet/runtime/pull/115738)
- \[release/9.0-staging] fix: in rsa signatures, configure digest before
padding mode by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;115695](https://redirect.github.com/dotnet/runtime/pull/115695)
- \[release/9.0-staging] JIT: Fix possible heap corruption in outlined
composite SSA storage by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;116132](https://redirect.github.com/dotnet/runtime/pull/116132)
- \[release/9.0-staging] Update dependencies from dotnet/roslyn by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;115984](https://redirect.github.com/dotnet/runtime/pull/115984)
- \[release/9.0-staging] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;115855](https://redirect.github.com/dotnet/runtime/pull/115855)
- \[release/9.0-staging] Update dependencies from dotnet/icu by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;115597](https://redirect.github.com/dotnet/runtime/pull/115597)
- \[release/9.0-staging] Update dependencies from dotnet/sdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;115710](https://redirect.github.com/dotnet/runtime/pull/115710)
- \[release/9.0-staging] Update dependencies from dotnet/cecil by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;115504](https://redirect.github.com/dotnet/runtime/pull/115504)
- \[release/9.0-staging] Update dependencies from dotnet/xharness by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;115589](https://redirect.github.com/dotnet/runtime/pull/115589)
- \[release/9.0] Update dependencies from dotnet/emsdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;115537](https://redirect.github.com/dotnet/runtime/pull/115537)
- Bump SDK version used by WASM since it was broken by dotnet/arcade
codeflow by [@&#8203;jozkee](https://redirect.github.com/jozkee) in
[#&#8203;116450](https://redirect.github.com/dotnet/runtime/pull/116450)
- \[automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;115576](https://redirect.github.com/dotnet/runtime/pull/115576)
- \[release/9.0-staging] Link peer's X509 stack handle to parent SSL
safe handle by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;115380](https://redirect.github.com/dotnet/runtime/pull/115380)
- \[release/9.0-staging] \[mono]\[interp] Minor SSA fixes by
[@&#8203;BrzVlad](https://redirect.github.com/BrzVlad) in
[#&#8203;116428](https://redirect.github.com/dotnet/runtime/pull/116428)
- \[release/9.0-staging] Update dependencies from dotnet/runtime-assets
by [@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)
in
[#&#8203;115677](https://redirect.github.com/dotnet/runtime/pull/115677)
- \[release/9.0-staging] Disable the UTFStringConversionFailures test on
CI runs by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;116460](https://redirect.github.com/dotnet/runtime/pull/116460)
- \[manual] Merge release/9.0-staging into release/9.0 by
[@&#8203;jozkee](https://redirect.github.com/jozkee) in
[#&#8203;116459](https://redirect.github.com/dotnet/runtime/pull/116459)
- Merging internal commits for release/9.0 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;116499](https://redirect.github.com/dotnet/runtime/pull/116499)
- \[release/9.0] Delete s390x and ppc64le helix queues by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;116537](https://redirect.github.com/dotnet/runtime/pull/116537)

**Full Changelog**:
<https://github.com/dotnet/runtime/compare/v9.0.6...v9.0.7>

###
[`v9.0.6`](https://redirect.github.com/dotnet/runtime/releases/tag/v9.0.6)

#### Bug Fixes

- **Read messages from binlog if process output is missing build
finished message
([#&#8203;114676](https://redirect.github.com/dotnet/runtime/pull/114676))**\
Improves reliability of the WebAssembly build process by reading
messages from the binlog when the process output does not contain the
expected build finished message, preventing build failures in certain
scenarios.

- **Fix debugger app hangs related to thread exit
([#&#8203;114917](https://redirect.github.com/dotnet/runtime/pull/114917))**\
Resolves an issue where applications could hang during debugging when
threads exit, ensuring smoother debugging experiences and preventing
deadlocks.

- **\[Mono] Workaround MSVC miscompiling sgen\_clz
([#&#8203;114903](https://redirect.github.com/dotnet/runtime/pull/114903))**\
Addresses a compiler miscompilation issue in MSVC affecting the Mono
garbage collector, improving runtime stability and correctness on
affected platforms.

- **Do not set the salt or info if they are NULL for OpenSSL HKDF
([#&#8203;114877](https://redirect.github.com/dotnet/runtime/pull/114877))**\
Fixes a cryptographic issue by ensuring that the salt or info parameters
are not set when they are NULL in OpenSSL HKDF, preventing potential
errors or unexpected behavior in key derivation.

- **\[Test Only] Fix Idn tests
([#&#8203;115032](https://redirect.github.com/dotnet/runtime/pull/115032))**\
Corrects issues in Internationalized Domain Name (Idn) tests, ensuring
accurate and reliable test results for domain name handling.

- **JIT: revised fix for fp division issue in profile synthesis
([#&#8203;115026](https://redirect.github.com/dotnet/runtime/pull/115026))**\
Provides a more robust fix for floating-point division issues in JIT
profile synthesis, improving numerical accuracy and preventing incorrect
calculations.

- **Handle OSSL 3.4 change to SAN:othername formatting
([#&#8203;115361](https://redirect.github.com/dotnet/runtime/pull/115361))**\
Updates certificate handling to accommodate changes in Subject
Alternative Name (SAN) formatting introduced in OpenSSL 3.4, ensuring
compatibility and correct parsing of certificates.

- **\[Mono] Fix c11 ARM64 atomics to issue full memory barrier
([#&#8203;115635](https://redirect.github.com/dotnet/runtime/pull/115635))**\
Fixes atomic operations on ARM64 in Mono to issue a full memory barrier,
ensuring correct synchronization and preventing subtle concurrency bugs.

#### Performance Improvements

- **\[WinHTTP] Certificate caching on WinHttpHandler to eliminate extra
call to Custom Certificate Validation
([#&#8203;114678](https://redirect.github.com/dotnet/runtime/pull/114678))**\
Improves HTTP performance by caching certificates in WinHttpHandler,
reducing redundant calls to custom certificate validation and speeding
up secure connections.

- **Improve distribute\_free\_regions
([#&#8203;115167](https://redirect.github.com/dotnet/runtime/pull/115167))**\
Optimizes memory management by enhancing the algorithm for distributing
free memory regions, leading to better memory utilization and
potentially improved application performance.

#### Technical Improvements

- **Strip trailing slash from source dir for cmake4
([#&#8203;114905](https://redirect.github.com/dotnet/runtime/pull/114905))**\
Refines build scripts by removing trailing slashes from source
directories when using CMake 4, preventing potential build path issues
and improving build reliability.

- **Don't expose TrustedCertificatesDirectory() and
StartNewTlsSessionContext() to NetFx
([#&#8203;114995](https://redirect.github.com/dotnet/runtime/pull/114995))**\
Restricts certain internal APIs from being exposed to .NET Framework,
reducing surface area and preventing unintended usage.

- **Add support for more libicu versions
([#&#8203;115376](https://redirect.github.com/dotnet/runtime/pull/115376))**\
Expands compatibility by supporting additional versions of the
International Components for Unicode (ICU) library, enhancing
globalization features across more environments.

#### Infrastructure

- **Run outerloop pipeline only for release branches, not
staging/preview
([#&#8203;115011](https://redirect.github.com/dotnet/runtime/pull/115011))**\
Optimizes CI/CD resources by limiting the outerloop pipeline to run only
on release branches, reducing unnecessary test runs and speeding up
development workflows.

- **Update CentOS Stream, Debian, OpenSUSE
([#&#8203;115027](https://redirect.github.com/dotnet/runtime/pull/115027))**\
Updates build and test infrastructure to use newer versions of CentOS
Stream, Debian, and OpenSUSE, ensuring ongoing compatibility and
security with supported Linux distributions.

- **Update MacOS signing to use PME
([#&#8203;115634](https://redirect.github.com/dotnet/runtime/pull/115634))**\
Switches MacOS code signing to use PME, improving the security and
reliability of the signing process for MacOS releases.

#### Dependency Updates

- **Update dependencies from dotnet/roslyn
([#&#8203;115353](https://redirect.github.com/dotnet/runtime/pull/115353))**\
Integrates the latest updates from the Roslyn compiler, bringing in bug
fixes, performance improvements, and new language features.

- **Update dependencies from dotnet/arcade
([#&#8203;115085](https://redirect.github.com/dotnet/runtime/pull/115085))**\
Updates the Arcade build infrastructure dependency, ensuring the latest
build tools and scripts are used.

- **Update dependencies from dotnet/sdk
([#&#8203;114856](https://redirect.github.com/dotnet/runtime/pull/114856),
[#&#8203;115466](https://redirect.github.com/dotnet/runtime/pull/115466))**\
Brings in the latest changes from the .NET SDK, improving build
reliability and incorporating upstream fixes.

- **Update dependencies from dotnet/icu
([#&#8203;114762](https://redirect.github.com/dotnet/runtime/pull/114762),
[#&#8203;115440](https://redirect.github.com/dotnet/runtime/pull/115440))**\
Updates the ICU library dependency, enhancing globalization support and
fixing related issues.

- **Update dependencies from dotnet/cecil
([#&#8203;114670](https://redirect.github.com/dotnet/runtime/pull/114670))**\
Incorporates the latest Mono.Cecil updates, improving assembly
manipulation and metadata handling.

- **Update dependencies from dotnet/emsdk
([#&#8203;114702](https://redirect.github.com/dotnet/runtime/pull/114702))**\
Updates the Emscripten SDK dependency, ensuring up-to-date WebAssembly
toolchain support.

- **Update dependencies from dotnet/xharness
([#&#8203;114855](https://redirect.github.com/dotnet/runtime/pull/114855))**\
Brings in the latest XHarness test runner updates, improving test
automation and reliability.

#### Miscellaneous

- **Update branding to 9.0.6
([#&#8203;115385](https://redirect.github.com/dotnet/runtime/pull/115385))**\
Updates version branding throughout the repository to reflect the 9.0.6
release.

- **Fix line endings
([#&#8203;115413](https://redirect.github.com/dotnet/runtime/pull/115413))**\
Standardizes line endings across the codebase, improving cross-platform
consistency and reducing merge conflicts.

- **\[automated] Merge branch 'release/9.0' => 'release/9.0-staging'
([#&#8203;114700](https://redirect.github.com/dotnet/runtime/pull/114700))**\
Automated merge to synchronize changes between release branches,
ensuring consistency across development streams.

- **Merging internal commits for release/9.0
([#&#8203;115535](https://redirect.github.com/dotnet/runtime/pull/115535))**\
Integrates internal commits into the release/9.0 branch, consolidating
changes for the release.

- **\[manual] Merge release/9.0-staging into release/9.0
([#&#8203;115497](https://redirect.github.com/dotnet/runtime/pull/115497))**\
Manually merges staging changes into the main release branch, preparing
for the official release.

***

This summary is generated and may contain inaccuracies. For complete
details, please review the linked pull requests.

**Full Changelog**:
<https://github.com/dotnet/runtime/compare/v9.0.5...v9.0.6>

###
[`v9.0.5`](https://redirect.github.com/dotnet/runtime/releases/tag/v9.0.5):
.NET 9.0.5

[Release](https://redirect.github.com/dotnet/core/releases/tag/v9.0.5)

##### What's Changed

- \[release/9.0-staging] \[HttpStress] \[SslStress] Run stress tests
nightly against staging branches by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113476](https://redirect.github.com/dotnet/runtime/pull/113476)
- \[release/9.0] \[browser]\[http] mute JS exceptions about network
errors + HEAD verb by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113261](https://redirect.github.com/dotnet/runtime/pull/113261)
- \[release/9.0-staging] Fix double dispose of GCHandle in
BrowserWebSocket by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113541](https://redirect.github.com/dotnet/runtime/pull/113541)
- \[release/9.0-staging] \[HttpStress] Fix Linux HttpStress build by
[@&#8203;antonfirsov](https://redirect.github.com/antonfirsov) in
[#&#8203;113617](https://redirect.github.com/dotnet/runtime/pull/113617)
- \[release/9.0-staging] Use minipal\_getcpufeatures to detect for AVX
([#&#8203;113032](https://redirect.github.com/dotnet/runtime/issues/113032))
by [@&#8203;cshung](https://redirect.github.com/cshung) in
[#&#8203;113489](https://redirect.github.com/dotnet/runtime/pull/113489)
- \[release/9.0-staging] Backport "Use FLS detach callback as a thread
termination notification. Another try." by
[@&#8203;VSadov](https://redirect.github.com/VSadov) in
[#&#8203;113055](https://redirect.github.com/dotnet/runtime/pull/113055)
- \[release/9.0-staging] \[Json] Avoid writing to PipeWriter if
IAsyncEnumerable throws before first item by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113699](https://redirect.github.com/dotnet/runtime/pull/113699)
- \[browser] Remove experimental args from NodeJS WBT runner (part2) by
[@&#8203;maraf](https://redirect.github.com/maraf) in
[#&#8203;113753](https://redirect.github.com/dotnet/runtime/pull/113753)
- \[9.0] Update openssl dependency for openSUSE by
[@&#8203;NikolaMilosavljevic](https://redirect.github.com/NikolaMilosavljevic)
in
[#&#8203;113548](https://redirect.github.com/dotnet/runtime/pull/113548)
- \[release/9.0-staging] JIT: avoid fp divide by zero in profile
synthesis by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113418](https://redirect.github.com/dotnet/runtime/pull/113418)
- \[release/9.0-staging] Do not substitute return values of constrained
calls by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113462](https://redirect.github.com/dotnet/runtime/pull/113462)
- \[release/9.0] Test failure -
SendAsync\_RequestVersion20\_ResponseVersion20 by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113649](https://redirect.github.com/dotnet/runtime/pull/113649)
- \[release/9.0-staging] \[mono] Missing memory barrier leads to crash
in multi-threaded scenarios by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113740](https://redirect.github.com/dotnet/runtime/pull/113740)
- \[release/9.0] Move DAC signing identity to PME by
[@&#8203;hoyosjs](https://redirect.github.com/hoyosjs) in
[#&#8203;114031](https://redirect.github.com/dotnet/runtime/pull/114031)
- \[release/9.0-staging] Update dependencies from dotnet/icu by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;113460](https://redirect.github.com/dotnet/runtime/pull/113460)
- \[release/9.0] Update dependencies from dotnet/emsdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;113483](https://redirect.github.com/dotnet/runtime/pull/113483)
- \[release/9.0-staging] Update dependencies from dotnet/runtime-assets
by [@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)
in
[#&#8203;113516](https://redirect.github.com/dotnet/runtime/pull/113516)
- \[release/9.0-staging] Update dependencies from dotnet/cecil by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;113461](https://redirect.github.com/dotnet/runtime/pull/113461)
- \[release/9.0-staging] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;113561](https://redirect.github.com/dotnet/runtime/pull/113561)
- \[release/9.0-staging] Update dependencies from dotnet/xharness by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;113595](https://redirect.github.com/dotnet/runtime/pull/113595)
- \[release/9.0-staging] Update dependencies from dotnet/roslyn by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;113821](https://redirect.github.com/dotnet/runtime/pull/113821)
- \[9.0] libnethost no LTCG by
[@&#8203;jkoritzinsky](https://redirect.github.com/jkoritzinsky) in
[#&#8203;113893](https://redirect.github.com/dotnet/runtime/pull/113893)
- \[9.0] Bring back yml necessary change types in label checkers by
[@&#8203;carlossanlop](https://redirect.github.com/carlossanlop) in
[#&#8203;114166](https://redirect.github.com/dotnet/runtime/pull/114166)
- \[release/9.0-staging] \[Apple mobile] Enable trimming on build
machines to match ILLink features by
[@&#8203;kotlarmilos](https://redirect.github.com/kotlarmilos) in
[#&#8203;113466](https://redirect.github.com/dotnet/runtime/pull/113466)
- \[release/9.0-staging] Fix VS div-by-0 in DacEnumerableHashTable code
by [@&#8203;github-actions](https://redirect.github.com/github-actions)
in
[#&#8203;113892](https://redirect.github.com/dotnet/runtime/pull/113892)
- \[release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by [@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)
in
[#&#8203;113517](https://redirect.github.com/dotnet/runtime/pull/113517)
- \[release/9.0-staging] Update dependencies from
dotnet/roslyn-analyzers by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;113822](https://redirect.github.com/dotnet/runtime/pull/113822)
- \[release/9.0-staging] Update dependencies from dotnet/sdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;113596](https://redirect.github.com/dotnet/runtime/pull/113596)
- Update branding to 9.0.5 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;114162](https://redirect.github.com/dotnet/runtime/pull/114162)
- \[automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;113449](https://redirect.github.com/dotnet/runtime/pull/113449)
- \[release/9.0] Update dependencies from dotnet/emsdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114185](https://redirect.github.com/dotnet/runtime/pull/114185)
- \[release/9.0-staging] Revert disabling of tests for HTTP servers by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;114207](https://redirect.github.com/dotnet/runtime/pull/114207)
- \[release/9.0-staging] Fix build break with cmake 4.0 by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;114278](https://redirect.github.com/dotnet/runtime/pull/114278)
- \[automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;114224](https://redirect.github.com/dotnet/runtime/pull/114224)
- \[release/9.0-staging] Fix inadvertently upgrading compiler warnings
to errors by
[@&#8203;akoeplinger](https://redirect.github.com/akoeplinger) in
[#&#8203;114331](https://redirect.github.com/dotnet/runtime/pull/114331)
- Merging internal commits for release/9.0 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[#&#8203;114396](https://redirect.github.com/dotnet/runtime/pull/114396)
- \[automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;114415](https://redirect.github.com/dotnet/runtime/pull/114415)
- \[release/9.0] Update dependencies from dotnet/emsdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114299](https://redirect.github.com/dotnet/runtime/pull/114299)
- \[release/9.0-staging] Update dependencies from dotnet/runtime-assets
by [@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)
in
[#&#8203;114473](https://redirect.github.com/dotnet/runtime/pull/114473)
- \[release/9.0-staging]\[mono]\[hotreload]Adjust row\_size and
size\_bitfield from the baseline based on the delta sizes by
[@&#8203;thaystg](https://redirect.github.com/thaystg) in
[#&#8203;114119](https://redirect.github.com/dotnet/runtime/pull/114119)
- \[release/9.0-staging] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114296](https://redirect.github.com/dotnet/runtime/pull/114296)
- \[release/9.0-staging] Update dependencies from dotnet/xharness by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114318](https://redirect.github.com/dotnet/runtime/pull/114318)
- \[release/9.0-staging] Update dependencies from dotnet/cecil by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114364](https://redirect.github.com/dotnet/runtime/pull/114364)
- \[release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by [@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)
in
[#&#8203;114474](https://redirect.github.com/dotnet/runtime/pull/114474)
- \[release/9.0] Fix edge cases in Tarjan GC bridge (Android) by
[@&#8203;filipnavara](https://redirect.github.com/filipnavara) in
[#&#8203;114391](https://redirect.github.com/dotnet/runtime/pull/114391)
- \[release/9.0-staging] \[debugger] Fix debugging a x86 app in mixed
mode by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;114077](https://redirect.github.com/dotnet/runtime/pull/114077)
- \[release/9.0-staging] \[infra]\[apple-mobile] Migrate MacCatalyst and
iOS/tvOS simulator jobs to `osx.14.arm64.open` and `osx.15.amd64.open`
queues by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;114617](https://redirect.github.com/dotnet/runtime/pull/114617)
- \[release/9.0-staging] Update dependencies from dotnet/cecil by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114615](https://redirect.github.com/dotnet/runtime/pull/114615)
- \[release/9.0-staging] Update dependencies from dotnet/sdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114613](https://redirect.github.com/dotnet/runtime/pull/114613)
- \[release/9.0-staging] Update dependencies from dotnet/runtime-assets
by [@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)
in
[#&#8203;114589](https://redirect.github.com/dotnet/runtime/pull/114589)
- \[release/9.0-staging] Update dependencies from dotnet/icu by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114254](https://redirect.github.com/dotnet/runtime/pull/114254)
- \[release/9.0] Update dependencies from dotnet/emsdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114576](https://redirect.github.com/dotnet/runtime/pull/114576)
- \[release/9.0-staging] Update dependencies from dotnet/xharness by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[#&#8203;114612](https://redirect.github.com/dotnet/runtime/pull/114612)
- \[release/9.0-staging] Moved a static field initialization from Thread
to ProcessorIdCache by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[#&#8203;114273](https://redirect.github.com/dotnet/runtime/pull/114273)
- Revert "\[release/9.0] Fix edge cases in Tarjan GC bridge (Android)"
by [@&#8203;steveisok](https://redirect.github.com/steveisok) in
[#&#8203;114641](https://redirect.github.com/dotnet/runtime/pull/114641)
- \[manual] Merge release/9.0-staging to release/9.0 by
[@&#8203;jozkee](https://redirect.github.com/jozkee) in
[#&#8203;114662](https://redirect.github.com/dotnet/runtime/pull/114662)

**Full Changelog**:
<https://github.com/dotnet/runtime/compare/v9.0.4...v9.0.5>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS45IiwidXBkYXRlZEluVmVyIjoiNDEuOTcuMTAiLCJ0YXJnZXRCcmFuY2giOiJkZXYiLCJsYWJlbHMiOltdfQ==-->
2025-09-10 22:33:19 +02:00
renovate[bot]
2af2a00032
chore(deps): update dotnet monorepo 2025-09-09 14:47:18 +00:00
Lala Sabathil
d0cafa88af
chore(deps): update actions/setup-dotnet action to v5 (#578)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/setup-dotnet](https://redirect.github.com/actions/setup-dotnet)
| action | major | `v4` -> `v5` |

---

### Release Notes

<details>
<summary>actions/setup-dotnet (actions/setup-dotnet)</summary>

###
[`v5`](https://redirect.github.com/actions/setup-dotnet/compare/v4...v5)

[Compare
Source](https://redirect.github.com/actions/setup-dotnet/compare/v4...v5)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS45MS4xIiwidXBkYXRlZEluVmVyIjoiNDEuOTEuMSIsInRhcmdldEJyYW5jaCI6ImRldiIsImxhYmVscyI6W119-->
2025-09-03 15:57:35 +02:00
renovate[bot]
714f0b6d77
chore(deps): update actions/setup-dotnet action to v5 2025-09-03 05:06:56 +00:00
Lala Sabathil
f135826ef4
chore(deps): update ncipollo/release-action action to v1.20.0 (#573)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[ncipollo/release-action](https://redirect.github.com/ncipollo/release-action)
| action | minor | `v1.14.0` -> `v1.20.0` |

---

### Release Notes

<details>
<summary>ncipollo/release-action (ncipollo/release-action)</summary>

###
[`v1.20.0`](https://redirect.github.com/ncipollo/release-action/compare/v1.19.2...v1.20.0)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.19.2...v1.20.0)

###
[`v1.19.2`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.19.2)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.19.1...v1.19.2)

#### What's Changed

- Update `immutableCreate`'s default in the documentation by
[@&#8203;bblanchon](https://redirect.github.com/bblanchon) in
[#&#8203;547](https://redirect.github.com/ncipollo/release-action/pull/547)
- Fixes
[#&#8203;548](https://redirect.github.com/ncipollo/release-action/issues/548)
Add support body + generated release notes by
[@&#8203;ncipollo](https://redirect.github.com/ncipollo) in
[#&#8203;549](https://redirect.github.com/ncipollo/release-action/pull/549)

#### New Contributors

- [@&#8203;bblanchon](https://redirect.github.com/bblanchon) made their
first contribution in
[#&#8203;547](https://redirect.github.com/ncipollo/release-action/pull/547)

**Full Changelog**:
<https://github.com/ncipollo/release-action/compare/v1...v1.19.2>

###
[`v1.19.1`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.19.1)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.19.0...v1.19.1)

Defaults immutableCreate to false if it is omitted.

**Full Changelog**:
<https://github.com/ncipollo/release-action/compare/v1.19.0...v1.19.1>

###
[`v1.19.0`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.19.0)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.18.0...v1.19.0)

#### What's Changed

- Fixes
[#&#8203;540](https://redirect.github.com/ncipollo/release-action/issues/540)
Add support for immutable releases by
[@&#8203;ncipollo](https://redirect.github.com/ncipollo) in
[#&#8203;544](https://redirect.github.com/ncipollo/release-action/pull/544)
- Bump actions/checkout from 4 to 5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;541](https://redirect.github.com/ncipollo/release-action/pull/541)
- Bump glob from 11.0.2 to 11.0.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;534](https://redirect.github.com/ncipollo/release-action/pull/534)

**Full Changelog**:
<https://github.com/ncipollo/release-action/compare/v1...v1.19.0>

###
[`v1.18.0`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.18.0)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.17.0...v1.18.0)

- Fixes
[#&#8203;529](https://redirect.github.com/ncipollo/release-action/issues/529)
Collect asset URLs into output

**Full Changelog**:
<https://github.com/ncipollo/release-action/compare/v1...v1.18.0>

###
[`v1.17.0`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.17.0)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.16.0...v1.17.0)

#### What's Changed

- Bump ts-jest from 29.2.5 to 29.2.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;506](https://redirect.github.com/ncipollo/release-action/pull/506)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
22.13.4 to 22.13.8 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;505](https://redirect.github.com/ncipollo/release-action/pull/505)
- Bump
[@&#8203;octokit/plugin-paginate-rest](https://redirect.github.com/octokit/plugin-paginate-rest)
from 9.1.5 to 9.2.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;507](https://redirect.github.com/ncipollo/release-action/pull/507)
- Bump
[@&#8203;octokit/request](https://redirect.github.com/octokit/request)
from 8.1.6 to 8.4.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;508](https://redirect.github.com/ncipollo/release-action/pull/508)
- Fixes
[#&#8203;513](https://redirect.github.com/ncipollo/release-action/issues/513)
Don't generate release notes if omitBody is set by
[@&#8203;ncipollo](https://redirect.github.com/ncipollo) in
[#&#8203;517](https://redirect.github.com/ncipollo/release-action/pull/517)
- Bump typescript from 5.7.3 to 5.8.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;518](https://redirect.github.com/ncipollo/release-action/pull/518)
- Bump ts-jest from 29.2.6 to 29.3.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;521](https://redirect.github.com/ncipollo/release-action/pull/521)
- Bump glob from 11.0.1 to 11.0.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;520](https://redirect.github.com/ncipollo/release-action/pull/520)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
22.13.8 to 22.15.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;519](https://redirect.github.com/ncipollo/release-action/pull/519)
- Bump ts-jest from 29.3.2 to 29.3.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;526](https://redirect.github.com/ncipollo/release-action/pull/526)
- Bump
[@&#8203;actions/github](https://redirect.github.com/actions/github)
from 6.0.0 to 6.0.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;525](https://redirect.github.com/ncipollo/release-action/pull/525)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
22.15.18 to 22.15.29 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;524](https://redirect.github.com/ncipollo/release-action/pull/524)
- Fixes
[#&#8203;529](https://redirect.github.com/ncipollo/release-action/issues/529)
Add zip and tarball urls to output

**Full Changelog**:
<https://github.com/ncipollo/release-action/compare/v1...v1.17.0>

###
[`v1.16.0`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.16.0)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.15.0...v1.16.0)

##### What's Changed

- Bump
[@&#8203;octokit/request-error](https://redirect.github.com/octokit/request-error)
from 5.0.1 to 5.1.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;498](https://redirect.github.com/ncipollo/release-action/pull/498)
- Update checkout action version in example by
[@&#8203;Cycloctane](https://redirect.github.com/Cycloctane) in
[#&#8203;496](https://redirect.github.com/ncipollo/release-action/pull/496)
- Bump undici from 5.28.4 to 5.28.5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;499](https://redirect.github.com/ncipollo/release-action/pull/499)
- Bump glob from 11.0.0 to 11.0.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;495](https://redirect.github.com/ncipollo/release-action/pull/495)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
22.10.3 to 22.13.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;500](https://redirect.github.com/ncipollo/release-action/pull/500)
- Regenerate release notes on release updates by
[@&#8203;rantoniuk](https://redirect.github.com/rantoniuk) in
[#&#8203;497](https://redirect.github.com/ncipollo/release-action/pull/497)

##### New Contributors

- [@&#8203;rantoniuk](https://redirect.github.com/rantoniuk) made their
first contribution in
[#&#8203;497](https://redirect.github.com/ncipollo/release-action/pull/497)

**Full Changelog**:
<https://github.com/ncipollo/release-action/compare/v1...v1.16.0>

###
[`v1.15.0`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.15.0)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.14.0...v1.15.0)

##### What's Changed

Add more explicit error when release list API call fails.

TLDR below - many dependency updates.

- Bump semver from 6.3.0 to 6.3.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;350](https://redirect.github.com/ncipollo/release-action/pull/350)
- Bump actions/checkout from 3 to 4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;364](https://redirect.github.com/ncipollo/release-action/pull/364)
- Bump glob from 10.3.1 to 10.3.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;361](https://redirect.github.com/ncipollo/release-action/pull/361)
- Bump jest-circus from 29.5.0 to 29.6.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;359](https://redirect.github.com/ncipollo/release-action/pull/359)
- Bump typescript from 5.1.6 to 5.2.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;362](https://redirect.github.com/ncipollo/release-action/pull/362)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.3.3 to 20.6.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;366](https://redirect.github.com/ncipollo/release-action/pull/366)
- Bump jest and
[@&#8203;types/jest](https://redirect.github.com/types/jest) by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;367](https://redirect.github.com/ncipollo/release-action/pull/367)
- Bump
[@&#8203;babel/traverse](https://redirect.github.com/babel/traverse)
from 7.17.3 to 7.23.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;378](https://redirect.github.com/ncipollo/release-action/pull/378)
- Bump jest and
[@&#8203;types/jest](https://redirect.github.com/types/jest) by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;377](https://redirect.github.com/ncipollo/release-action/pull/377)
- Bump jest-circus from 29.6.4 to 29.7.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;376](https://redirect.github.com/ncipollo/release-action/pull/376)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.6.0 to 20.8.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;379](https://redirect.github.com/ncipollo/release-action/pull/379)
- Bump [@&#8203;actions/core](https://redirect.github.com/actions/core)
from 1.10.0 to 1.10.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;375](https://redirect.github.com/ncipollo/release-action/pull/375)
- Bump [@&#8203;types/jest](https://redirect.github.com/types/jest) from
29.5.5 to 29.5.7 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;386](https://redirect.github.com/ncipollo/release-action/pull/386)
- Bump actions/setup-node from 3 to 4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;381](https://redirect.github.com/ncipollo/release-action/pull/381)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.8.6 to 20.9.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;390](https://redirect.github.com/ncipollo/release-action/pull/390)
- Bump typescript from 5.2.2 to 5.3.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;396](https://redirect.github.com/ncipollo/release-action/pull/396)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.9.0 to 20.10.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;395](https://redirect.github.com/ncipollo/release-action/pull/395)
- Bump [@&#8203;types/jest](https://redirect.github.com/types/jest) from
29.5.7 to 29.5.11 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;399](https://redirect.github.com/ncipollo/release-action/pull/399)
- Bump
[@&#8203;actions/github](https://redirect.github.com/actions/github)
from 5.1.1 to 6.0.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;385](https://redirect.github.com/ncipollo/release-action/pull/385)
- Bump typescript from 5.3.2 to 5.3.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;403](https://redirect.github.com/ncipollo/release-action/pull/403)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.10.1 to 20.10.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;402](https://redirect.github.com/ncipollo/release-action/pull/402)
- Upgrade to Node 20 by
[@&#8203;aovens-quantifi](https://redirect.github.com/aovens-quantifi)
in
[#&#8203;411](https://redirect.github.com/ncipollo/release-action/pull/411)
- Bump undici from 5.28.2 to 5.28.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;423](https://redirect.github.com/ncipollo/release-action/pull/423)
- Bump [@&#8203;types/jest](https://redirect.github.com/types/jest) from
29.5.11 to 29.5.12 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;427](https://redirect.github.com/ncipollo/release-action/pull/427)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.10.6 to 20.11.24 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;426](https://redirect.github.com/ncipollo/release-action/pull/426)
- Bump ts-jest from 29.1.1 to 29.1.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;409](https://redirect.github.com/ncipollo/release-action/pull/409)
- Bump undici from 5.28.3 to 5.28.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;439](https://redirect.github.com/ncipollo/release-action/pull/439)
- Bump typescript from 5.3.3 to 5.4.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;438](https://redirect.github.com/ncipollo/release-action/pull/438)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.11.24 to 20.12.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;437](https://redirect.github.com/ncipollo/release-action/pull/437)
- Bump glob from 10.3.10 to 10.3.12 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;436](https://redirect.github.com/ncipollo/release-action/pull/436)
- Bump braces from 3.0.2 to 3.0.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;449](https://redirect.github.com/ncipollo/release-action/pull/449)
- Bump glob from 10.3.12 to 11.0.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;457](https://redirect.github.com/ncipollo/release-action/pull/457)
- Bump typescript from 5.4.3 to 5.5.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;459](https://redirect.github.com/ncipollo/release-action/pull/459)
- Bump ts-jest from 29.1.2 to 29.2.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;460](https://redirect.github.com/ncipollo/release-action/pull/460)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.12.2 to 22.0.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;458](https://redirect.github.com/ncipollo/release-action/pull/458)
- Bump cross-spawn from 7.0.3 to 7.0.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;480](https://redirect.github.com/ncipollo/release-action/pull/480)
- Bump micromatch from 4.0.4 to 4.0.8 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;463](https://redirect.github.com/ncipollo/release-action/pull/463)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
22.0.2 to 22.10.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;487](https://redirect.github.com/ncipollo/release-action/pull/487)
- Bump [@&#8203;types/jest](https://redirect.github.com/types/jest) from
29.5.12 to 29.5.14 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;476](https://redirect.github.com/ncipollo/release-action/pull/476)
- Bump ts-jest from 29.2.4 to 29.2.5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;464](https://redirect.github.com/ncipollo/release-action/pull/464)
- Bump [@&#8203;actions/core](https://redirect.github.com/actions/core)
from 1.10.1 to 1.11.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;488](https://redirect.github.com/ncipollo/release-action/pull/488)
- Bump typescript from 5.5.4 to 5.7.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;490](https://redirect.github.com/ncipollo/release-action/pull/490)

##### New Contributors

- [@&#8203;aovens-quantifi](https://redirect.github.com/aovens-quantifi)
made their first contribution in
[#&#8203;411](https://redirect.github.com/ncipollo/release-action/pull/411)

**Full Changelog**:
<https://github.com/ncipollo/release-action/compare/v1.13.0...v1.15.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNy4yIiwidXBkYXRlZEluVmVyIjoiNDEuOTEuMSIsInRhcmdldEJyYW5jaCI6ImRldiIsImxhYmVscyI6W119-->
2025-09-03 02:45:13 +02:00
renovate[bot]
b1047bb3c2
chore(deps): update ncipollo/release-action action to v1.20.0 2025-09-02 22:58:38 +00:00
Mira
5901c9a13d
fix: im tired 2025-05-07 20:19:10 +02:00
Mira
4cb76d7a9d
fix: nre 2025-05-07 20:18:39 +02:00
Mira
4f0bc4f6ad
fix: fix minor issues 2025-05-07 20:15:26 +02:00
Mira
50c60bf0da
feat: User Count Channel 2025-05-07 19:49:03 +02:00
Mira
1c3aa23a76
fix: Delete old deleted message logs
(they stay uploaded to discord)
2025-05-07 18:48:06 +02:00
Mira
7698e14c3e
fix: build now? 2025-05-07 00:45:28 +02:00
Mira
254375e71d
fix: Update quickchart-csharp 2025-05-07 00:36:00 +02:00
Mira
833b1c79f9
chore: Update deps 2025-05-07 00:16:37 +02:00
Mira
bbb9935205
fix: Fix duplicate sync task calls on startup 2025-05-07 00:14:50 +02:00
Mira
6f1155c8c4
chore: Disable dcs updates 2025-04-07 21:38:46 +02:00
Mira
2e73d66dc2
refactor: Downgrade to stable & use AddEmbed over WithEmbed 2025-04-07 21:36:42 +02:00
Mira
4705cb5f26
chore: Update deps 2025-04-01 17:39:14 +02:00
Mira
e58aca5af7
fix: fix missing CompiledCommands check 2025-04-01 17:37:56 +02:00
Lala Sabathil
b7d814936f
chore(deps): update dotnet monorepo to 9.0.3 (#558)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [System.Drawing.Common](https://redirect.github.com/dotnet/winforms) |
`9.0.2` -> `9.0.3` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/System.Drawing.Common/9.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/System.Drawing.Common/9.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/System.Drawing.Common/9.0.2/9.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/System.Drawing.Common/9.0.2/9.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [System.Text.Json](https://dot.net/)
([source](https://redirect.github.com/dotnet/runtime)) | `9.0.2` ->
`9.0.3` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/System.Text.Json/9.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/System.Text.Json/9.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/System.Text.Json/9.0.2/9.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/System.Text.Json/9.0.2/9.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>dotnet/winforms (System.Drawing.Common)</summary>

###
[`v9.0.3`](https://redirect.github.com/dotnet/winforms/releases/tag/v9.0.3):
.NET 9.0.3

[Release](https://redirect.github.com/dotnet/core/releases/tag/v9.0.3)

##### What's Changed

- Don't unwrap wrapped DataObject inner data store
([#&#8203;12800](https://redirect.github.com/dotnet/winforms/issues/12800))
by [@&#8203;JeremyKuhne](https://redirect.github.com/JeremyKuhne) in
[https://github.com/dotnet/winforms/pull/12806](https://redirect.github.com/dotnet/winforms/pull/12806)
- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/winforms/pull/12854](https://redirect.github.com/dotnet/winforms/pull/12854)
- Update branding to 9.0.3 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[https://github.com/dotnet/winforms/pull/12875](https://redirect.github.com/dotnet/winforms/pull/12875)
- \[release/9.0] WinForms ComboBox border and drop down button are not
visible sometimes by
[@&#8203;ricardobossan](https://redirect.github.com/ricardobossan) in
[https://github.com/dotnet/winforms/pull/12785](https://redirect.github.com/dotnet/winforms/pull/12785)
- \[release/9.0] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/winforms/pull/12924](https://redirect.github.com/dotnet/winforms/pull/12924)

**Full Changelog**:
https://github.com/dotnet/winforms/compare/v9.0.2...v9.0.3

</details>

<details>
<summary>dotnet/runtime (System.Text.Json)</summary>

###
[`v9.0.3`](https://redirect.github.com/dotnet/runtime/releases/tag/v9.0.3):
.NET 9.0.3

[Release](https://redirect.github.com/dotnet/core/releases/tag/v9.0.3)

#### What's Changed

- \[release/9.0-staging] Fix wrong alias-to for tvos AOT packs in net8
workload manifest by
[@&#8203;akoeplinger](https://redirect.github.com/akoeplinger) in
[https://github.com/dotnet/runtime/pull/110871](https://redirect.github.com/dotnet/runtime/pull/110871)
- \[release/9.0] Disable tests targetting
http://corefx-net-http11.azurewebsites.net by
[@&#8203;rzikm](https://redirect.github.com/rzikm) in
[https://github.com/dotnet/runtime/pull/111402](https://redirect.github.com/dotnet/runtime/pull/111402)
- \[release/9.0-staging] Support generic fields in
PersistedAssemblyBuilder by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/110839](https://redirect.github.com/dotnet/runtime/pull/110839)
- \[release/9.0-staging] Re-enable skiasharp WBT tests
([#&#8203;109232](https://redirect.github.com/dotnet/runtime/issues/109232))
by [@&#8203;radekdoulik](https://redirect.github.com/radekdoulik) in
[https://github.com/dotnet/runtime/pull/110734](https://redirect.github.com/dotnet/runtime/pull/110734)
- \[release/9.0-staging] Backport test fixes related to BinaryFormatter
removal by [@&#8203;adamsitnik](https://redirect.github.com/adamsitnik)
in
[https://github.com/dotnet/runtime/pull/111508](https://redirect.github.com/dotnet/runtime/pull/111508)
- \[manual] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;carlossanlop](https://redirect.github.com/carlossanlop) in
[https://github.com/dotnet/runtime/pull/111565](https://redirect.github.com/dotnet/runtime/pull/111565)
- \[release/9.0] \[wasi] Disable build in .NET 9 by
[@&#8203;maraf](https://redirect.github.com/maraf) in
[https://github.com/dotnet/runtime/pull/108877](https://redirect.github.com/dotnet/runtime/pull/108877)
- \[release/9.0-staging] \[mono] Disable UnitTest_GVM_TypeLoadException
for fullAOT jobs by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/111394](https://redirect.github.com/dotnet/runtime/pull/111394)
- \[release/9.0-staging] Fix UnsafeAccessor scenario for modopts/modreqs
when comparing field sigs. by
[@&#8203;AaronRobinsonMSFT](https://redirect.github.com/AaronRobinsonMSFT)
in
[https://github.com/dotnet/runtime/pull/111675](https://redirect.github.com/dotnet/runtime/pull/111675)
- \[release/9.0-staging] \[mono] Run runtime-llvm and runtime-ioslike on
Mono LLVM PRs by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/111739](https://redirect.github.com/dotnet/runtime/pull/111739)
- \[release/9.0-staging] fix stack 2x2 tensor along dimension 1 by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/110053](https://redirect.github.com/dotnet/runtime/pull/110053)
- \[release/9.0-staging] Fix race condition in cleanup of collectible
thread static variables by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/111275](https://redirect.github.com/dotnet/runtime/pull/111275)
- \[release/9.0-staging] \[iOS] Retrieve device locale in full
(specific) format from ObjectiveC APIs by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/111612](https://redirect.github.com/dotnet/runtime/pull/111612)
- \[release/9.0-staging] Add workflow to prevent merging a PR when the
`NO-MERGE` label is applied by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/111961](https://redirect.github.com/dotnet/runtime/pull/111961)
- \[release/9.0-staging] Use alternative format string specifier to
ensure decimal point is present by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/111444](https://redirect.github.com/dotnet/runtime/pull/111444)
- \[release/9.0-staging] Fixed android build with NDK 23 by
[@&#8203;jkurdek](https://redirect.github.com/jkurdek) in
[https://github.com/dotnet/runtime/pull/111696](https://redirect.github.com/dotnet/runtime/pull/111696)
- \[release/9.0-staging] Fix UNC paths by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/111499](https://redirect.github.com/dotnet/runtime/pull/111499)
- \[release/9.0-staging] \[mono] \[llvm-aot] Fixed storing Vector3 into
memory by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/111069](https://redirect.github.com/dotnet/runtime/pull/111069)
- \[release/9.0] Remove explicit \__compact_unwind entries from x64
assembler by
[@&#8203;filipnavara](https://redirect.github.com/filipnavara) in
[https://github.com/dotnet/runtime/pull/112204](https://redirect.github.com/dotnet/runtime/pull/112204)
- Update branding to 9.0.3 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[https://github.com/dotnet/runtime/pull/112144](https://redirect.github.com/dotnet/runtime/pull/112144)
- \[release/9.0-staging] Update dependencies from dotnet/xharness by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/111606](https://redirect.github.com/dotnet/runtime/pull/111606)
- \[release/9.0] Update dependencies from dotnet/emsdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/111891](https://redirect.github.com/dotnet/runtime/pull/111891)
- \[release/9.0] Update dependencies from dotnet/emsdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/112189](https://redirect.github.com/dotnet/runtime/pull/112189)
- \[release/9.0-staging] Update dependencies from dotnet/icu by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/111519](https://redirect.github.com/dotnet/runtime/pull/111519)
- \[release/9.0-staging] Update dependencies from dotnet/icu by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/112121](https://redirect.github.com/dotnet/runtime/pull/112121)
- \[release/9.0-staging] Update dependencies from dotnet/runtime-assets
by [@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)
in
[https://github.com/dotnet/runtime/pull/111737](https://redirect.github.com/dotnet/runtime/pull/111737)
- \[release/9.0-staging] Fix shimmed implementation of
TryGetHashAndReset to handle HMAC. by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/112015](https://redirect.github.com/dotnet/runtime/pull/112015)
- Remove Windows 8.1 from test queues by
[@&#8203;agocke](https://redirect.github.com/agocke) in
[https://github.com/dotnet/runtime/pull/112056](https://redirect.github.com/dotnet/runtime/pull/112056)
- \[release/9.0-staging] Update dependencies from
dotnet/source-build-reference-packages by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/111603](https://redirect.github.com/dotnet/runtime/pull/111603)
- \[browser] Remove experimental args from NodeJS WBT runner by
[@&#8203;maraf](https://redirect.github.com/maraf) in
[https://github.com/dotnet/runtime/pull/111655](https://redirect.github.com/dotnet/runtime/pull/111655)
- \[release/9.0-staging] Update dependencies from dotnet/sdk by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/111607](https://redirect.github.com/dotnet/runtime/pull/111607)
- \[release/9.0-staging] Update dependencies from
dotnet/roslyn-analyzers by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/111826](https://redirect.github.com/dotnet/runtime/pull/111826)
- \[release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by [@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro)
in
[https://github.com/dotnet/runtime/pull/111885](https://redirect.github.com/dotnet/runtime/pull/111885)
- \[release/9.0-staging] Update dependencies from dotnet/cecil by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/112122](https://redirect.github.com/dotnet/runtime/pull/112122)
- \[release/9.0-staging] Update dependencies from dotnet/roslyn by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/112225](https://redirect.github.com/dotnet/runtime/pull/112225)
- \[release/9.0-staging] Update dependencies from dotnet/icu by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/112261](https://redirect.github.com/dotnet/runtime/pull/112261)
- \[automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
[@&#8203;github-actions](https://redirect.github.com/github-actions) in
[https://github.com/dotnet/runtime/pull/112219](https://redirect.github.com/dotnet/runtime/pull/112219)
- \[release/9.0-staging] Update dependencies from dotnet/xharness by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/112340](https://redirect.github.com/dotnet/runtime/pull/112340)
- \[release/9.0-staging] Update dependencies from dotnet/arcade by
[@&#8203;dotnet-maestro](https://redirect.github.com/dotnet-maestro) in
[https://github.com/dotnet/runtime/pull/111483](https://redirect.github.com/dotnet/runtime/pull/111483)
- Backport pr 111723 to 9.0 staging by
[@&#8203;StephenMolloy](https://redirect.github.com/StephenMolloy) in
[https://github.com/dotnet/runtime/pull/112322](https://redirect.github.com/dotnet/runtime/pull/112322)
- \[manual] Merge release/9.0-staging into release/9.0 by
[@&#8203;carlossanlop](https://redirect.github.com/carlossanlop) in
[https://github.com/dotnet/runtime/pull/112382](https://redirect.github.com/dotnet/runtime/pull/112382)
- \[9.0] Backport labeling workflow changes by
[@&#8203;carlossanlop](https://redirect.github.com/carlossanlop) in
[https://github.com/dotnet/runtime/pull/112240](https://redirect.github.com/dotnet/runtime/pull/112240)
- \[9.0] Move release/9.0 localization back to main too by
[@&#8203;carlossanlop](https://redirect.github.com/carlossanlop) in
[https://github.com/dotnet/runtime/pull/112443](https://redirect.github.com/dotnet/runtime/pull/112443)
- Merging internal commits for release/9.0 by
[@&#8203;vseanreesermsft](https://redirect.github.com/vseanreesermsft)
in
[https://github.com/dotnet/runtime/pull/112453](https://redirect.github.com/dotnet/runtime/pull/112453)

**Full Changelog**:
https://github.com/dotnet/runtime/compare/v9.0.2...v9.0.3

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOTQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE5NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-15 15:21:24 +01:00
Lala Sabathil
5d0478bf79
chore(deps): update dependencies/discatsharp digest to ab69b24 (#557)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `20adeb0` -> `ab69b24` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODUuNCIsInVwZGF0ZWRJblZlciI6IjM5LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-15 15:21:11 +01:00
renovate[bot]
d22aecdf79
chore(deps): update dependencies/discatsharp digest to ab69b24 2025-03-15 02:44:39 +00:00
renovate[bot]
eadcd7ee85
chore(deps): update dotnet monorepo to 9.0.3 2025-03-11 17:33:22 +00:00
Lala Sabathil
02be184d6b
chore(deps): update dependencies/discatsharp digest to 20adeb0 (#556)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `2a0fcc4` -> `20adeb0` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODUuNCIsInVwZGF0ZWRJblZlciI6IjM5LjE4NS40IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-08 21:52:57 +01:00
renovate[bot]
768c11b424
chore(deps): update dependencies/discatsharp digest to 20adeb0 2025-03-07 22:18:13 +00:00
Lala Sabathil
72041a034c
chore(deps): update dependency ffmpegcore to 5.2.0 (#555)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [FFMpegCore](https://redirect.github.com/rosenbjerg/FFMpegCore) |
`5.1.0` -> `5.2.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/FFMpegCore/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/FFMpegCore/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/FFMpegCore/5.1.0/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/FFMpegCore/5.1.0/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODUuNCIsInVwZGF0ZWRJblZlciI6IjM5LjE4NS40IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-06 01:31:05 +01:00
renovate[bot]
6766a6b51e
chore(deps): update dependency ffmpegcore to 5.2.0 2025-03-05 15:44:55 +00:00
Lala Sabathil
8d160455bd
chore(deps): update dependencies/discatsharp digest to 2a0fcc4 (#554)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `9729aca` -> `2a0fcc4` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODUuNCIsInVwZGF0ZWRJblZlciI6IjM5LjE4NS40IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-04 17:05:54 +01:00
renovate[bot]
3093c2ae29
chore(deps): update dependencies/discatsharp digest to 2a0fcc4 2025-03-04 03:17:10 +00:00
Lala Sabathil
3a73ca58ec
chore(deps): update dependency genhttp.modules.staticwebsites to 9.7.0 (#549)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [GenHTTP.Modules.StaticWebsites](https://genhttp.org/)
([source](https://redirect.github.com/Kaliumhexacyanoferrat/GenHTTP)) |
`9.6.2` -> `9.7.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/GenHTTP.Modules.StaticWebsites/9.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/GenHTTP.Modules.StaticWebsites/9.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/GenHTTP.Modules.StaticWebsites/9.6.2/9.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/GenHTTP.Modules.StaticWebsites/9.6.2/9.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>Kaliumhexacyanoferrat/GenHTTP
(GenHTTP.Modules.StaticWebsites)</summary>

###
[`v9.7.0`](https://redirect.github.com/Kaliumhexacyanoferrat/GenHTTP/releases/tag/v9.7.0):
Version 9.7

#### Bug Fixes

- Fix a `StackOverflowException` when receiving a lot of data via a
websocket connection
([#&#8203;641](https://redirect.github.com/Kaliumhexacyanoferrat/GenHTTP/issues/641)
by [@&#8203;magnusjjj](https://redirect.github.com/magnusjjj))
- Fix reverse proxy returning a `204 No Content` response with content
([#&#8203;630](https://redirect.github.com/Kaliumhexacyanoferrat/GenHTTP/issues/630))
- Fix `path` being a reserved argument name in service routes
([#&#8203;637](https://redirect.github.com/Kaliumhexacyanoferrat/GenHTTP/issues/637))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE4NS40IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-04 00:56:33 +01:00
renovate[bot]
389c32a238
chore(deps): update dependency genhttp.modules.staticwebsites to 9.7.0 2025-03-03 23:56:23 +00:00
Lala Sabathil
94ed0df9a7
chore(deps): update dependency genhttp.core to 9.7.0 (#548)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [GenHTTP.Core](https://genhttp.org/) | `9.6.2` -> `9.7.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/GenHTTP.Core/9.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/GenHTTP.Core/9.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/GenHTTP.Core/9.6.2/9.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/GenHTTP.Core/9.6.2/9.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-04 00:55:59 +01:00
Lala Sabathil
c8a21b0b70
Update dev.yml
Signed-off-by: Lala Sabathil <aiko@aitsys.dev>
2025-03-04 00:51:38 +01:00
Lala Sabathil
d674f8404c
chore(deps): update dependencies/discatsharp digest to 9729aca (#553)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `f8ac274` -> `9729aca` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODUuNCIsInVwZGF0ZWRJblZlciI6IjM5LjE4NS40IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-04 00:48:48 +01:00
renovate[bot]
ae09d35b0e
chore(deps): update dependencies/discatsharp digest to 9729aca 2025-03-03 23:32:08 +00:00
Lala Sabathil
d57a294f49
chore(deps): update dependencies/discatsharp digest to f8ac274 (#552)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `25608db` -> `f8ac274` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODUuNCIsInVwZGF0ZWRJblZlciI6IjM5LjE4NS40IiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-03 18:13:14 +01:00
renovate[bot]
c393de1082
chore(deps): update dependencies/discatsharp digest to f8ac274 2025-03-03 16:37:37 +00:00
Lala Sabathil
270c500410
chore(deps): update dependencies/discatsharp digest to 25608db (#551)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `883ab23` -> `25608db` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-02 17:30:14 +01:00
renovate[bot]
9857a77dd4
chore(deps): update dependencies/discatsharp digest to 25608db 2025-03-02 14:15:13 +00:00
Lala Sabathil
b807ebda4d
chore(deps): update dependencies/discatsharp digest to 883ab23 (#550)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `eb409de` -> `883ab23` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-03-01 00:02:01 +01:00
renovate[bot]
c800526ca8
chore(deps): update dependencies/discatsharp digest to 883ab23 2025-02-28 21:51:23 +00:00
renovate[bot]
c9c220a8ea
chore(deps): update dependency genhttp.core to 9.7.0 2025-02-27 18:20:02 +00:00
Lala Sabathil
6dbb5bd738
chore(deps): update dotnet monorepo to 4.13.0 (#545)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[Microsoft.CodeAnalysis.CSharp](https://redirect.github.com/dotnet/roslyn)
| `4.12.0` -> `4.13.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/Microsoft.CodeAnalysis.CSharp/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/Microsoft.CodeAnalysis.CSharp/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/Microsoft.CodeAnalysis.CSharp/4.12.0/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/Microsoft.CodeAnalysis.CSharp/4.12.0/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[Microsoft.CodeAnalysis.Scripting](https://redirect.github.com/dotnet/roslyn)
| `4.12.0` -> `4.13.0` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/Microsoft.CodeAnalysis.Scripting/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/Microsoft.CodeAnalysis.Scripting/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/Microsoft.CodeAnalysis.Scripting/4.12.0/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/Microsoft.CodeAnalysis.Scripting/4.12.0/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-27 08:14:19 +01:00
Lala Sabathil
2024d85a82
chore(deps): update dependencies/discatsharp digest to eb409de (#546)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `e95f028` -> `eb409de` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-27 08:13:49 +01:00
renovate[bot]
ca9b970829
chore(deps): update dependencies/discatsharp digest to eb409de 2025-02-27 07:00:30 +00:00
Lala Sabathil
2b4e6b59a1
chore(deps): update dependencies/discatsharp digest to e95f028 (#544)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `584452e` -> `e95f028` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-24 23:19:19 +01:00
renovate[bot]
8b03d88106
chore(deps): update dotnet monorepo to 4.13.0 2025-02-24 22:10:28 +00:00
renovate[bot]
92cd485f9c
chore(deps): update dependencies/discatsharp digest to e95f028 2025-02-24 22:10:24 +00:00
Lala Sabathil
e04ecc09eb
fix: use role.type 2025-02-24 01:10:05 +01:00
Lala Sabathil
b7cd7c8480
chore(deps): update dependencies/discatsharp digest to 584452e (#540)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `5ace61e` -> `584452e` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-24 00:58:14 +01:00
renovate[bot]
6768421fee
chore(deps): update dependencies/discatsharp digest to 584452e 2025-02-23 22:57:06 +00:00
Mira
772d8715a5
Update renovate.json
Signed-off-by: Mira <xorog@outlook.de>
2025-02-23 04:25:53 +01:00
Mira
77bcd25224
Revert "chore(deps): update ncipollo/release-action action to v1.16.0" (#542) 2025-02-23 04:23:37 +01:00
Lala Sabathil
88f11da182
chore(deps): update ncipollo/release-action action to v1.16.0 (#541)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[ncipollo/release-action](https://redirect.github.com/ncipollo/release-action)
| action | minor | `v1.14.0` -> `v1.16.0` |

---

### Release Notes

<details>
<summary>ncipollo/release-action (ncipollo/release-action)</summary>

###
[`v1.16.0`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.16.0)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.15.0...v1.16.0)

#### What's Changed

- Bump
[@&#8203;octokit/request-error](https://redirect.github.com/octokit/request-error)
from 5.0.1 to 5.1.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/498](https://redirect.github.com/ncipollo/release-action/pull/498)
- Update checkout action version in example by
[@&#8203;Cycloctane](https://redirect.github.com/Cycloctane) in
[https://github.com/ncipollo/release-action/pull/496](https://redirect.github.com/ncipollo/release-action/pull/496)
- Bump undici from 5.28.4 to 5.28.5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/499](https://redirect.github.com/ncipollo/release-action/pull/499)
- Bump glob from 11.0.0 to 11.0.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/495](https://redirect.github.com/ncipollo/release-action/pull/495)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
22.10.3 to 22.13.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/500](https://redirect.github.com/ncipollo/release-action/pull/500)
- Regenerate release notes on release updates by
[@&#8203;rantoniuk](https://redirect.github.com/rantoniuk) in
[https://github.com/ncipollo/release-action/pull/497](https://redirect.github.com/ncipollo/release-action/pull/497)

#### New Contributors

- [@&#8203;rantoniuk](https://redirect.github.com/rantoniuk) made their
first contribution in
[https://github.com/ncipollo/release-action/pull/497](https://redirect.github.com/ncipollo/release-action/pull/497)

**Full Changelog**:
https://github.com/ncipollo/release-action/compare/v1...v1.16.0

###
[`v1.15.0`](https://redirect.github.com/ncipollo/release-action/releases/tag/v1.15.0)

[Compare
Source](https://redirect.github.com/ncipollo/release-action/compare/v1.14.0...v1.15.0)

#### What's Changed

Add more explicit error when release list API call fails.

TLDR below - many dependency updates.

- Bump semver from 6.3.0 to 6.3.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/350](https://redirect.github.com/ncipollo/release-action/pull/350)
- Bump actions/checkout from 3 to 4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/364](https://redirect.github.com/ncipollo/release-action/pull/364)
- Bump glob from 10.3.1 to 10.3.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/361](https://redirect.github.com/ncipollo/release-action/pull/361)
- Bump jest-circus from 29.5.0 to 29.6.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/359](https://redirect.github.com/ncipollo/release-action/pull/359)
- Bump typescript from 5.1.6 to 5.2.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/362](https://redirect.github.com/ncipollo/release-action/pull/362)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.3.3 to 20.6.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/366](https://redirect.github.com/ncipollo/release-action/pull/366)
- Bump jest and
[@&#8203;types/jest](https://redirect.github.com/types/jest) by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/367](https://redirect.github.com/ncipollo/release-action/pull/367)
- Bump
[@&#8203;babel/traverse](https://redirect.github.com/babel/traverse)
from 7.17.3 to 7.23.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/378](https://redirect.github.com/ncipollo/release-action/pull/378)
- Bump jest and
[@&#8203;types/jest](https://redirect.github.com/types/jest) by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/377](https://redirect.github.com/ncipollo/release-action/pull/377)
- Bump jest-circus from 29.6.4 to 29.7.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/376](https://redirect.github.com/ncipollo/release-action/pull/376)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.6.0 to 20.8.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/379](https://redirect.github.com/ncipollo/release-action/pull/379)
- Bump [@&#8203;actions/core](https://redirect.github.com/actions/core)
from 1.10.0 to 1.10.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/375](https://redirect.github.com/ncipollo/release-action/pull/375)
- Bump [@&#8203;types/jest](https://redirect.github.com/types/jest) from
29.5.5 to 29.5.7 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/386](https://redirect.github.com/ncipollo/release-action/pull/386)
- Bump actions/setup-node from 3 to 4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/381](https://redirect.github.com/ncipollo/release-action/pull/381)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.8.6 to 20.9.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/390](https://redirect.github.com/ncipollo/release-action/pull/390)
- Bump typescript from 5.2.2 to 5.3.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/396](https://redirect.github.com/ncipollo/release-action/pull/396)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.9.0 to 20.10.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/395](https://redirect.github.com/ncipollo/release-action/pull/395)
- Bump [@&#8203;types/jest](https://redirect.github.com/types/jest) from
29.5.7 to 29.5.11 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/399](https://redirect.github.com/ncipollo/release-action/pull/399)
- Bump
[@&#8203;actions/github](https://redirect.github.com/actions/github)
from 5.1.1 to 6.0.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/385](https://redirect.github.com/ncipollo/release-action/pull/385)
- Bump typescript from 5.3.2 to 5.3.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/403](https://redirect.github.com/ncipollo/release-action/pull/403)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.10.1 to 20.10.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/402](https://redirect.github.com/ncipollo/release-action/pull/402)
- Upgrade to Node 20 by
[@&#8203;aovens-quantifi](https://redirect.github.com/aovens-quantifi)
in
[https://github.com/ncipollo/release-action/pull/411](https://redirect.github.com/ncipollo/release-action/pull/411)
- Bump undici from 5.28.2 to 5.28.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/423](https://redirect.github.com/ncipollo/release-action/pull/423)
- Bump [@&#8203;types/jest](https://redirect.github.com/types/jest) from
29.5.11 to 29.5.12 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/427](https://redirect.github.com/ncipollo/release-action/pull/427)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.10.6 to 20.11.24 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/426](https://redirect.github.com/ncipollo/release-action/pull/426)
- Bump ts-jest from 29.1.1 to 29.1.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/409](https://redirect.github.com/ncipollo/release-action/pull/409)
- Bump undici from 5.28.3 to 5.28.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/439](https://redirect.github.com/ncipollo/release-action/pull/439)
- Bump typescript from 5.3.3 to 5.4.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/438](https://redirect.github.com/ncipollo/release-action/pull/438)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.11.24 to 20.12.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/437](https://redirect.github.com/ncipollo/release-action/pull/437)
- Bump glob from 10.3.10 to 10.3.12 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/436](https://redirect.github.com/ncipollo/release-action/pull/436)
- Bump braces from 3.0.2 to 3.0.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/449](https://redirect.github.com/ncipollo/release-action/pull/449)
- Bump glob from 10.3.12 to 11.0.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/457](https://redirect.github.com/ncipollo/release-action/pull/457)
- Bump typescript from 5.4.3 to 5.5.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/459](https://redirect.github.com/ncipollo/release-action/pull/459)
- Bump ts-jest from 29.1.2 to 29.2.4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/460](https://redirect.github.com/ncipollo/release-action/pull/460)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
20.12.2 to 22.0.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/458](https://redirect.github.com/ncipollo/release-action/pull/458)
- Bump cross-spawn from 7.0.3 to 7.0.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/480](https://redirect.github.com/ncipollo/release-action/pull/480)
- Bump micromatch from 4.0.4 to 4.0.8 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/463](https://redirect.github.com/ncipollo/release-action/pull/463)
- Bump [@&#8203;types/node](https://redirect.github.com/types/node) from
22.0.2 to 22.10.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/487](https://redirect.github.com/ncipollo/release-action/pull/487)
- Bump [@&#8203;types/jest](https://redirect.github.com/types/jest) from
29.5.12 to 29.5.14 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/476](https://redirect.github.com/ncipollo/release-action/pull/476)
- Bump ts-jest from 29.2.4 to 29.2.5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/464](https://redirect.github.com/ncipollo/release-action/pull/464)
- Bump [@&#8203;actions/core](https://redirect.github.com/actions/core)
from 1.10.1 to 1.11.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/488](https://redirect.github.com/ncipollo/release-action/pull/488)
- Bump typescript from 5.5.4 to 5.7.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[https://github.com/ncipollo/release-action/pull/490](https://redirect.github.com/ncipollo/release-action/pull/490)

#### New Contributors

- [@&#8203;aovens-quantifi](https://redirect.github.com/aovens-quantifi)
made their first contribution in
[https://github.com/ncipollo/release-action/pull/411](https://redirect.github.com/ncipollo/release-action/pull/411)

**Full Changelog**:
https://github.com/ncipollo/release-action/compare/v1.13.0...v1.15.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-22 19:44:14 +01:00
renovate[bot]
b44a6dbacc
chore(deps): update ncipollo/release-action action to v1.16.0 2025-02-22 18:11:22 +00:00
Lala Sabathil
3cf99fd69d
chore(deps): update dependencies/discatsharp digest to 5ace61e (#539)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `9ae63bd` -> `5ace61e` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2Ny4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-13 11:43:23 +01:00
renovate[bot]
078d7984b8
chore(deps): update dependencies/discatsharp digest to 5ace61e 2025-02-13 10:23:59 +00:00
Lala Sabathil
6c15be31bd
chore(deps): update dependencies/discatsharp digest to 9ae63bd (#538)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `613b8ab` -> `9ae63bd` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-12 12:26:04 +01:00
renovate[bot]
21d4be4239
chore(deps): update dependencies/discatsharp digest to 9ae63bd 2025-02-12 10:30:25 +00:00
renovate[bot]
b440e3fa60
chore(deps): update dependencies/discatsharp digest to 613b8ab (#535)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 23:33:58 +01:00
renovate[bot]
805bba780e
chore(deps): update dependency system.text.json to 9.0.2 (#537)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 23:33:15 +01:00
renovate[bot]
1035eeb1cf
chore(deps): update dependency system.drawing.common to 9.0.2 (#536)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 23:31:56 +01:00
Lala Sabathil
b38a91473e
chore(deps): update dependencies/discatsharp digest to 57a7820 (#534)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `bfd01f5` -> `57a7820` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-11 18:42:38 +01:00
renovate[bot]
a9f7244b17
chore(deps): update dependencies/discatsharp digest to 57a7820 2025-02-11 17:37:13 +00:00
Lala Sabathil
a6eafd3d05
chore(deps): update dependencies/discatsharp digest to bfd01f5 (#533)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `7848dd1` -> `bfd01f5` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-11 18:36:33 +01:00
renovate[bot]
6da3e2055b
chore(deps): update dependencies/discatsharp digest to bfd01f5 2025-02-11 17:04:15 +00:00
Lala Sabathil
cc22de02c9
fix compiler 2025-02-11 10:47:38 +01:00
Lala Sabathil
11dd71537d
fix issues 2025-02-11 10:39:42 +01:00
Lala Sabathil
293ccd8c52
Update DiscordExtensions.cs 2025-02-11 10:28:19 +01:00
Lala Sabathil
1b2fc0f3b9
fix: fix dcs changes 2025-02-11 10:24:29 +01:00
Lala Sabathil
a02fd32990
chore(deps): update dependencies/discatsharp digest to 7848dd1 (#532)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `0b85fab` -> `7848dd1` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-11 10:06:09 +01:00
renovate[bot]
906c539cca
chore(deps): update dependencies/discatsharp digest to 7848dd1 2025-02-11 04:38:23 +00:00
Lala Sabathil
a6ae872744
chore(deps): update dependencies/discatsharp digest to 0b85fab (#531)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `dd5b346` -> `0b85fab` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-10 22:53:49 +01:00
renovate[bot]
5181b4aaa3
chore(deps): update dependencies/discatsharp digest to 0b85fab 2025-02-10 21:41:23 +00:00
Lala Sabathil
e2cab675c8
chore(deps): update dependency genhttp.modules.staticwebsites to 9.6.2 (#525)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [GenHTTP.Modules.StaticWebsites](https://genhttp.org/)
([source](https://redirect.github.com/Kaliumhexacyanoferrat/GenHTTP)) |
`9.6.0` -> `9.6.2` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/GenHTTP.Modules.StaticWebsites/9.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/GenHTTP.Modules.StaticWebsites/9.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/GenHTTP.Modules.StaticWebsites/9.6.0/9.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/GenHTTP.Modules.StaticWebsites/9.6.0/9.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>Kaliumhexacyanoferrat/GenHTTP
(GenHTTP.Modules.StaticWebsites)</summary>

###
[`v9.6.2`](https://redirect.github.com/Kaliumhexacyanoferrat/GenHTTP/releases/tag/v9.6.2):
Version 9.6.2

#### Bug Fixes

- Fix `Keep-Alive` connections breaking on .NET 8
([#&#8203;628](https://redirect.github.com/Kaliumhexacyanoferrat/GenHTTP/pull/628))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-10 19:12:52 +01:00
renovate[bot]
a601dd13ef
chore(deps): update dependency genhttp.modules.staticwebsites to 9.6.2 2025-02-10 18:12:25 +00:00
Lala Sabathil
38922d93df
chore(deps): update dependency genhttp.core to 9.6.2 (#524)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [GenHTTP.Core](https://genhttp.org/) | `9.6.0` -> `9.6.2` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/GenHTTP.Core/9.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/GenHTTP.Core/9.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/GenHTTP.Core/9.6.0/9.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/GenHTTP.Core/9.6.0/9.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-10 19:11:48 +01:00
Lala Sabathil
7a9b9fc8e3
Update dev.yml
Signed-off-by: Lala Sabathil <aiko@aitsys.dev>
2025-02-10 19:11:33 +01:00
Lala Sabathil
5ec50d9645
chore(deps): update dependencies/discatsharp digest to dd5b346 (#530)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `ded64f1` -> `dd5b346` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-10 19:10:34 +01:00
renovate[bot]
b9207c0271
chore(deps): update dependencies/discatsharp digest to dd5b346 2025-02-10 17:00:48 +00:00
Lala Sabathil
d9b9c2a604
chore(deps): update dependencies/discatsharp digest to ded64f1 (#529)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `0178d4b` -> `ded64f1` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-07 02:18:16 +01:00
renovate[bot]
e9d438a860
chore(deps): update dependencies/discatsharp digest to ded64f1 2025-02-07 00:56:03 +00:00
Lala Sabathil
db6cb7af0c
chore(deps): update dependencies/discatsharp digest to 0178d4b (#528)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `8703ed1` -> `0178d4b` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-05 23:03:08 +01:00
renovate[bot]
8c0519048c
chore(deps): update dependencies/discatsharp digest to 0178d4b 2025-02-05 09:44:40 +00:00
Lala Sabathil
59b7abf932
chore(deps): update dependencies/discatsharp digest to 8703ed1 (#527)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `52c69f9` -> `8703ed1` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-05 05:49:18 +01:00
renovate[bot]
5dfc15fa83
chore(deps): update dependencies/discatsharp digest to 8703ed1 2025-02-04 21:47:35 +00:00
Lala Sabathil
159edca9e4
chore(deps): update dependencies/discatsharp digest to 52c69f9 (#526)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `88f6d58` -> `52c69f9` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-02-03 15:20:07 +01:00
renovate[bot]
89463f8ed6
chore(deps): update dependencies/discatsharp digest to 52c69f9 2025-02-03 14:01:00 +00:00
renovate[bot]
d3e8aa676e
chore(deps): update dependency genhttp.core to 9.6.2 2025-01-31 13:32:57 +00:00
Lala Sabathil
795a5211bf
chore(deps): update dependencies/discatsharp digest to 88f6d58 (#523)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| Dependencies/DisCatSharp | digest | `79808aa` -> `88f6d58` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-01-30 17:52:45 +01:00
renovate[bot]
055d098d20
chore(deps): update dependencies/discatsharp digest to 88f6d58 2025-01-30 13:47:27 +00:00
Mira
46dc0947c4
chore: Update breaking change 2025-01-29 22:52:19 +01:00
renovate[bot]
dac0a0a8b4
chore(deps): update dependencies/discatsharp digest to 79808aa (#522)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 22:20:35 +01:00
Lala Sabathil
73d285c99d
chore(deps): update dependency htmlsanitizer to v9 (#521)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [HtmlSanitizer](https://redirect.github.com/mganss/HtmlSanitizer) |
`8.1.870` -> `9.0.876` |
[![age](https://developer.mend.io/api/mc/badges/age/nuget/HtmlSanitizer/9.0.876?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/nuget/HtmlSanitizer/9.0.876?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/nuget/HtmlSanitizer/8.1.870/9.0.876?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/nuget/HtmlSanitizer/8.1.870/9.0.876?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>mganss/HtmlSanitizer (HtmlSanitizer)</summary>

###
[`v9.0.876`](https://redirect.github.com/mganss/HtmlSanitizer/releases/tag/v9.0.876):
9.0.876


[#&#8203;565](https://redirect.github.com/mganss/HtmlSanitizer/issues/565)

###
[`v9.0.873`](https://redirect.github.com/mganss/HtmlSanitizer/releases/tag/v9.0.873):
9.0.873

Add FilterUrl to IHtmlSanitizer (fixes
[#&#8203;565](https://redirect.github.com/mganss/HtmlSanitizer/issues/565))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Fortunevale/ProjectMakoto).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbXX0=-->
2025-01-29 22:09:08 +01:00
renovate[bot]
7f2b5b38f4
chore(deps): update dependency htmlsanitizer to v9 2025-01-29 17:56:17 +00:00
69 changed files with 495 additions and 266 deletions

View file

@ -18,7 +18,7 @@ jobs:
with: with:
exclude_path: 'SecretsIgnore.txt' exclude_path: 'SecretsIgnore.txt'
spellcheck: spellcheck:
name: Clone Repository name: Spell Check
runs-on: self-hosted runs-on: self-hosted
steps: steps:
- name: Checkout Actions Repository - name: Checkout Actions Repository
@ -36,9 +36,10 @@ jobs:
run: rm -rf ProjectMakotoTest/ run: rm -rf ProjectMakotoTest/
- name: Setup .NET Core SDK - name: Setup .NET Core SDK
uses: actions/setup-dotnet@v4 uses: actions/setup-dotnet@v5
with: with:
dotnet-version: | dotnet-version: |
10.0.100-preview.1.25120.13
9.x 9.x
- name: "Clone Repository" - name: "Clone Repository"
@ -68,4 +69,4 @@ jobs:
- name: Test Build Makoto Plugins - name: Test Build Makoto Plugins
run: sh build_all.sh 1 run: sh build_all.sh 1
working-directory: ProjectMakotoTest/OfficialPlugins/ working-directory: ProjectMakotoTest/OfficialPlugins/

View file

@ -22,7 +22,7 @@ jobs:
known_hosts: ${{ secrets.SSH_KNOWN_HOST }} known_hosts: ${{ secrets.SSH_KNOWN_HOST }}
- name: Setup .NET Core SDK 9.x - name: Setup .NET Core SDK 9.x
uses: actions/setup-dotnet@v4 uses: actions/setup-dotnet@v5
with: with:
dotnet-version: '9.x' dotnet-version: '9.x'
@ -106,7 +106,7 @@ jobs:
- name: Create Release - name: Create Release
if: ${{ !github.event.act }} # skip during local actions testing if: ${{ !github.event.act }} # skip during local actions testing
uses: ncipollo/release-action@v1.14.0 uses: ncipollo/release-action@v1.20.0
with: with:
artifacts: "ProjectMakoto/ProjectMakoto/Release.zip" artifacts: "ProjectMakoto/ProjectMakoto/Release.zip"
generateReleaseNotes: true generateReleaseNotes: true

View file

@ -50,7 +50,7 @@ jobs:
known_hosts: ${{ secrets.SSH_KNOWN_HOST }} known_hosts: ${{ secrets.SSH_KNOWN_HOST }}
- name: Setup .NET Core SDK 8.x - name: Setup .NET Core SDK 8.x
uses: actions/setup-dotnet@v4 uses: actions/setup-dotnet@v5
with: with:
dotnet-version: | dotnet-version: |
9.x 9.x
@ -135,7 +135,7 @@ jobs:
- name: Create Release - name: Create Release
if: ${{ !github.event.act }} # skip during local actions testing if: ${{ !github.event.act }} # skip during local actions testing
uses: ncipollo/release-action@v1.14.0 uses: ncipollo/release-action@v1.20.0
with: with:
artifacts: "ProjectMakotoPreview/ProjectMakoto/Release.zip" artifacts: "ProjectMakotoPreview/ProjectMakoto/Release.zip"
generateReleaseNotes: true generateReleaseNotes: true

@ -1 +1 @@
Subproject commit dadeb77e1667b6785ee8368eb92b2bbe1efba06e Subproject commit cc41bea57617e81f116fbbae6e7de2f8d9ca3991

@ -1 +1 @@
Subproject commit 79e7cffb4e38d68d2af71d321d8698fd799b3e59 Subproject commit 2ca985d24861f56feccc901357283dacc72182bf

@ -1 +1 @@
Subproject commit b0318f5602b29482638a71dae7184b075bc58b5a Subproject commit f2b6f1aaa49060e0592986d93ef45694dc157f4f

@ -1 +1 @@
Subproject commit 4e795fddc75a59f2512243f59c02de3d0823cdd2 Subproject commit 3bb0c0e17764905e8931346e7a5a3526a0441b7c

@ -1 +1 @@
Subproject commit ea04fd278535c33a3b78d056adf6c25a5cb687bc Subproject commit 0e28d28f051edb2e7cfb9699d2d12f3dd49fac78

View file

@ -13,7 +13,7 @@ for /d /r %%i in (*deps*) do (
cd /d "%original_dir%" cd /d "%original_dir%"
git submodule update --init --depth 0 REM git submodule update --init --depth 0
for /D %%i in (*) do ( for /D %%i in (*) do (
if /I "%%i" neq "deps" ( if /I "%%i" neq "deps" (

View file

@ -334,6 +334,7 @@ public sealed class Bot
} }
}); });
_ = this.CleanupOldPrunedMessages().Add(this);
_ = this.ProcessDeletionRequests().Add(this); _ = this.ProcessDeletionRequests().Add(this);
}).Add(this).IsVital(); }).Add(this).IsVital();
@ -522,6 +523,42 @@ public sealed class Bot
Environment.FailFast("Failed to exit"); Environment.FailFast("Failed to exit");
} }
private async Task CleanupOldPrunedMessages()
{
_ = new Func<Task>(async () =>
{
_ = this.CleanupOldPrunedMessages().Add(this);
}).CreateScheduledTask(DateTime.UtcNow.AddHours(24));
foreach (var guildDirectory in Directory.GetDirectories("WebServer").Select(x => new DirectoryInfo(x)))
{
if (guildDirectory.GetDirectories().Any(x => x.Name.Equals("DeletedMessages", StringComparison.CurrentCultureIgnoreCase)))
{
var deletedMessagesDirectory = guildDirectory.GetDirectories().First(x => x.Name.Equals("DeletedMessages", StringComparison.CurrentCultureIgnoreCase));
foreach (var deletedMessageFile in deletedMessagesDirectory.GetFiles())
{
if (deletedMessageFile.LastWriteTimeUtc.GetTimespanSince() > TimeSpan.FromDays(30))
{
Log.Information("Deleting '{File}'..", deletedMessageFile.FullName);
deletedMessageFile.Delete();
}
}
if (deletedMessagesDirectory.GetFiles().Length == 0)
{
Log.Information("Deleting '{File}'..", deletedMessagesDirectory.FullName);
deletedMessagesDirectory.Delete();
}
}
if (guildDirectory.GetFiles().Length == 0 && guildDirectory.GetDirectories().Length == 0)
{
Log.Information("Deleting '{File}'..", guildDirectory.FullName);
guildDirectory.Delete();
}
}
}
private async Task ProcessDeletionRequests() private async Task ProcessDeletionRequests()
{ {
_ = new Func<Task>(async () => _ = new Func<Task>(async () =>

View file

@ -253,10 +253,10 @@ public abstract class BaseCommand
#region RespondOrEdit #region RespondOrEdit
public Task<DiscordMessage> RespondOrEdit(DiscordEmbed embed) public Task<DiscordMessage> RespondOrEdit(DiscordEmbed embed)
=> this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed)); => this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed));
public Task<DiscordMessage> RespondOrEdit(DiscordEmbedBuilder embed) public Task<DiscordMessage> RespondOrEdit(DiscordEmbedBuilder embed)
=> this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.Build())); => this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.Build()));
public Task<DiscordMessage> RespondOrEdit(string content) public Task<DiscordMessage> RespondOrEdit(string content)
=> this.RespondOrEdit(new DiscordMessageBuilder().WithContent(content)); => this.RespondOrEdit(new DiscordMessageBuilder().WithContent(content));
@ -274,7 +274,9 @@ public abstract class BaseCommand
foreach (var b in discordMessageBuilder.Files) foreach (var b in discordMessageBuilder.Files)
files.Add(b.Filename, b.Stream); files.Add(b.Filename, b.Stream);
_ = discordWebhookBuilder.AddComponents(discordMessageBuilder.Components); if (discordMessageBuilder.Components.IsNotNullAndNotEmpty())
_ = discordWebhookBuilder.AddComponents(discordMessageBuilder.Components);
_ = discordWebhookBuilder.AddEmbeds(discordMessageBuilder.Embeds); _ = discordWebhookBuilder.AddEmbeds(discordMessageBuilder.Embeds);
_ = discordWebhookBuilder.AddFiles(files); _ = discordWebhookBuilder.AddFiles(files);
discordWebhookBuilder.Content = discordMessageBuilder.Content; discordWebhookBuilder.Content = discordMessageBuilder.Content;
@ -293,7 +295,9 @@ public abstract class BaseCommand
foreach (var b in discordMessageBuilder.Files) foreach (var b in discordMessageBuilder.Files)
files.Add(b.Filename, b.Stream); files.Add(b.Filename, b.Stream);
_ = discordWebhookBuilder.AddComponents(discordMessageBuilder.Components); if (discordMessageBuilder.Components.IsNotNullAndNotEmpty())
_ = discordWebhookBuilder.AddComponents(discordMessageBuilder.Components);
_ = discordWebhookBuilder.AddEmbeds(discordMessageBuilder.Embeds); _ = discordWebhookBuilder.AddEmbeds(discordMessageBuilder.Embeds);
_ = discordWebhookBuilder.AddFiles(files); _ = discordWebhookBuilder.AddFiles(files);
discordWebhookBuilder.Content = discordMessageBuilder.Content; discordWebhookBuilder.Content = discordMessageBuilder.Content;
@ -312,7 +316,9 @@ public abstract class BaseCommand
foreach (var b in discordMessageBuilder.Files) foreach (var b in discordMessageBuilder.Files)
files.Add(b.Filename, b.Stream); files.Add(b.Filename, b.Stream);
_ = discordWebhookBuilder.AddComponents(discordMessageBuilder.Components); if (discordMessageBuilder.Components.IsNotNullAndNotEmpty())
_ = discordWebhookBuilder.AddComponents(discordMessageBuilder.Components);
_ = discordWebhookBuilder.AddEmbeds(discordMessageBuilder.Embeds); _ = discordWebhookBuilder.AddEmbeds(discordMessageBuilder.Embeds);
_ = discordWebhookBuilder.AddFiles(files); _ = discordWebhookBuilder.AddFiles(files);
discordWebhookBuilder.Content = discordMessageBuilder.Content; discordWebhookBuilder.Content = discordMessageBuilder.Content;
@ -437,7 +443,7 @@ public abstract class BaseCommand
async Task RefreshMessage() async Task RefreshMessage()
{ {
var dropdown = new DiscordRoleSelectComponent(this.GetString(this.t.Commands.Common.Prompts.SelectARole), SelectionInteractionId, 1, 1, false); var dropdown = new DiscordRoleSelectComponent(this.GetString(this.t.Commands.Common.Prompts.SelectARole), SelectionInteractionId, 1, 1, false);
var builder = new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder(this.ctx.ResponseMessage.Embeds[0]).AsAwaitingInput(this.ctx)).AddComponents(dropdown).WithContent(this.ctx.ResponseMessage.Content); var builder = new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder(this.ctx.ResponseMessage.Embeds[0]).AsAwaitingInput(this.ctx)).AddComponents(dropdown).WithContent(this.ctx.ResponseMessage.Content);
if (Selected.IsNullOrWhiteSpace()) if (Selected.IsNullOrWhiteSpace())
_ = ConfirmSelectionButton.Disable(); _ = ConfirmSelectionButton.Disable();
@ -541,7 +547,7 @@ public abstract class BaseCommand
this.ctx.Client.ComponentInteractionCreated -= RunInteraction; this.ctx.Client.ComponentInteractionCreated -= RunInteraction;
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(this.ctx.ResponseMessage.Embeds[0]).WithContent(this.ctx.ResponseMessage.Content)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(this.ctx.ResponseMessage.Embeds[0]).WithContent(this.ctx.ResponseMessage.Content));
if (ExceptionOccurred) if (ExceptionOccurred)
return new InteractionResult<DiscordRole>(ThrownException); return new InteractionResult<DiscordRole>(ThrownException);
@ -578,7 +584,7 @@ public abstract class BaseCommand
async Task RefreshMessage() async Task RefreshMessage()
{ {
var dropdown = new DiscordChannelSelectComponent(this.GetString(this.t.Commands.Common.Prompts.SelectAChannel), channelTypes, SelectionInteractionId); var dropdown = new DiscordChannelSelectComponent(this.GetString(this.t.Commands.Common.Prompts.SelectAChannel), channelTypes, SelectionInteractionId);
var builder = new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder(this.ctx.ResponseMessage.Embeds[0]).AsAwaitingInput(this.ctx)).AddComponents(dropdown).WithContent(this.ctx.ResponseMessage.Content); var builder = new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder(this.ctx.ResponseMessage.Embeds[0]).AsAwaitingInput(this.ctx)).AddComponents(dropdown).WithContent(this.ctx.ResponseMessage.Content);
if (Selected.IsNullOrWhiteSpace()) if (Selected.IsNullOrWhiteSpace())
_ = ConfirmSelectionButton.Disable(); _ = ConfirmSelectionButton.Disable();
@ -662,7 +668,7 @@ public abstract class BaseCommand
} }
this.ctx.Client.ComponentInteractionCreated -= RunInteraction; this.ctx.Client.ComponentInteractionCreated -= RunInteraction;
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(this.ctx.ResponseMessage.Embeds[0]).WithContent(this.ctx.ResponseMessage.Content)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(this.ctx.ResponseMessage.Embeds[0]).WithContent(this.ctx.ResponseMessage.Content));
if (ExceptionOccurred) if (ExceptionOccurred)
return new InteractionResult<DiscordChannel>(ThrownException); return new InteractionResult<DiscordChannel>(ThrownException);
@ -707,7 +713,7 @@ public abstract class BaseCommand
async Task RefreshMessage() async Task RefreshMessage()
{ {
var dropdown = new DiscordStringSelectComponent(CustomPlaceHolder, options.Skip(CurrentPage * 25).Take(25).Select(x => new DiscordStringSelectComponentOption(x.Label, x.Value, x.Description, (x.Value == Selected), x.Emoji)), SelectionInteractionId); var dropdown = new DiscordStringSelectComponent(CustomPlaceHolder, options.Skip(CurrentPage * 25).Take(25).Select(x => new DiscordStringSelectComponentOption(x.Label, x.Value, x.Description, (x.Value == Selected), x.Emoji)), SelectionInteractionId);
var builder = new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder(this.ctx.ResponseMessage.Embeds[0]).AsAwaitingInput(this.ctx)).AddComponents(dropdown).WithContent(this.ctx.ResponseMessage.Content); var builder = new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder(this.ctx.ResponseMessage.Embeds[0]).AsAwaitingInput(this.ctx)).AddComponents(dropdown).WithContent(this.ctx.ResponseMessage.Content);
_ = NextPageButton.SetState(options.Skip(CurrentPage * 25).Count() <= 25); _ = NextPageButton.SetState(options.Skip(CurrentPage * 25).Count() <= 25);
_ = PrevPageButton.SetState(CurrentPage == 0); _ = PrevPageButton.SetState(CurrentPage == 0);
@ -784,7 +790,7 @@ public abstract class BaseCommand
this.ctx.Client.ComponentInteractionCreated -= RunInteraction; this.ctx.Client.ComponentInteractionCreated -= RunInteraction;
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(this.ctx.ResponseMessage.Embeds[0]).WithContent(this.ctx.ResponseMessage.Content)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(this.ctx.ResponseMessage.Embeds[0]).WithContent(this.ctx.ResponseMessage.Content));
if (ExceptionOccurred) if (ExceptionOccurred)
return new InteractionResult<string>(ThrownException); return new InteractionResult<string>(ThrownException);
@ -807,7 +813,7 @@ public abstract class BaseCommand
var ReOpen = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(this.t.Commands.Common.Prompts.ReOpenModal), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🔄"))); var ReOpen = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(this.t.Commands.Common.Prompts.ReOpenModal), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🔄")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(customEmbed ?? new DiscordEmbedBuilder _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(customEmbed ?? new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Common.Prompts.WaitingForModalResponse, true) Description = this.GetString(this.t.Commands.Common.Prompts.WaitingForModalResponse, true)
}.AsAwaitingInput(this.ctx)).AddComponents(new List<DiscordComponent> { ReOpen, MessageComponents.GetCancelButton(this.ctx.DbUser, this.ctx.Bot) })); }.AsAwaitingInput(this.ctx)).AddComponents(new List<DiscordComponent> { ReOpen, MessageComponents.GetCancelButton(this.ctx.DbUser, this.ctx.Bot) }));
@ -872,7 +878,7 @@ public abstract class BaseCommand
this.ctx.Client.ComponentInteractionCreated -= RunInteraction; this.ctx.Client.ComponentInteractionCreated -= RunInteraction;
if (ResetToOriginalEmbed) if (ResetToOriginalEmbed)
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(oriEmbed)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(oriEmbed));
if (ExceptionOccurred) if (ExceptionOccurred)
return new InteractionResult<ComponentInteractionCreateEventArgs>(ThrownException); return new InteractionResult<ComponentInteractionCreateEventArgs>(ThrownException);
@ -1445,7 +1451,7 @@ public abstract class BaseCommand
{ {
if (this.ctx.DbUser.PendingUserUpload.TimeOut.GetTotalSecondsUntil() > 0 && !this.ctx.DbUser.PendingUserUpload.InteractionHandled) if (this.ctx.DbUser.PendingUserUpload.TimeOut.GetTotalSecondsUntil() > 0 && !this.ctx.DbUser.PendingUserUpload.InteractionHandled)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = $"`An upload interaction is already taking place. Please finish it beforehand.`", Description = $"`An upload interaction is already taking place. Please finish it beforehand.`",
}.AsError(this.ctx))); }.AsError(this.ctx)));
@ -1479,7 +1485,7 @@ public abstract class BaseCommand
#region FinishInteraction #region FinishInteraction
public void ModifyToTimedOut(bool Delete = false) public void ModifyToTimedOut(bool Delete = false)
{ {
_ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder(this.ctx.ResponseMessage.Embeds[0]).WithFooter(this.ctx.ResponseMessage.Embeds[0]?.Footer?.Text + $" • {this.GetString(this.t.Commands.Common.InteractionTimeout)}").WithColor(DiscordColor.Gray))); _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder(this.ctx.ResponseMessage.Embeds[0]).WithFooter(this.ctx.ResponseMessage.Embeds[0]?.Footer?.Text + $" • {this.GetString(this.t.Commands.Common.InteractionTimeout)}").WithColor(DiscordColor.Gray)));
if (Delete) if (Delete)
_ = Task.Delay(5000).ContinueWith(_ => _ = Task.Delay(5000).ContinueWith(_ =>
@ -1635,19 +1641,19 @@ public abstract class BaseCommand
}.AsError(this.ctx)); }.AsError(this.ctx));
public void SendVoiceStateError() public void SendVoiceStateError()
=> _ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder => _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Common.Errors.VoiceChannel).Build(true), Description = this.GetString(this.t.Commands.Common.Errors.VoiceChannel).Build(true),
}.AsError(this.ctx))); }.AsError(this.ctx)));
public void SendUserBanError(BanDetails entry) public void SendUserBanError(BanDetails entry)
=> _ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder => _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.t.Commands.Common.Errors.UserBan.t["en"].Build(true, new TVar("Reason", entry.Reason)), Description = this.t.Commands.Common.Errors.UserBan.t["en"].Build(true, new TVar("Reason", entry.Reason)),
}.AsError(this.ctx))); }.AsError(this.ctx)));
public void SendGuildBanError(BanDetails entry) public void SendGuildBanError(BanDetails entry)
=> _ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder => _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Common.Errors.GuildBan, true, new TVar("Reason", entry.Reason)), Description = this.GetString(this.t.Commands.Common.Errors.GuildBan, true, new TVar("Reason", entry.Reason)),
}.AsError(this.ctx))); }.AsError(this.ctx)));
@ -1667,20 +1673,20 @@ public abstract class BaseCommand
}; };
public void SendDataError() public void SendDataError()
=> _ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder => _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Common.Errors.Data, true, new TVar("Command", $"{this.ctx.Prefix}data delete")), Description = this.GetString(this.t.Commands.Common.Errors.Data, true, new TVar("Command", $"{this.ctx.Prefix}data delete")),
}.AsError(this.ctx))); }.AsError(this.ctx)));
public void SendDmError() public void SendDmError()
=> _ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder => _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = $"📩 {this.GetString(this.t.Commands.Common.Errors.DirectMessage, true)}", Description = $"📩 {this.GetString(this.t.Commands.Common.Errors.DirectMessage, true)}",
ImageUrl = (this.ctx.User.Presence.ClientStatus.Mobile.HasValue ? "https://cdn.discordapp.com/attachments/1005430437952356423/1144961395515998238/34rhz83ghtzu3ght.gif" : "https://cdn.discordapp.com/attachments/1005430437952356423/1144964670197862400/et2grtzu2ghrzi52.gif") ImageUrl = (this.ctx.User.Presence.ClientStatus.Mobile.HasValue ? "https://cdn.discordapp.com/attachments/1005430437952356423/1144961395515998238/34rhz83ghtzu3ght.gif" : "https://cdn.discordapp.com/attachments/1005430437952356423/1144964670197862400/et2grtzu2ghrzi52.gif")
}.AsError(this.ctx))); }.AsError(this.ctx)));
public void SendDmRedirect() public void SendDmRedirect()
=> _ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder => _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = $"📩 {this.GetString(this.t.Commands.Common.DirectMessageRedirect, true)}", Description = $"📩 {this.GetString(this.t.Commands.Common.DirectMessageRedirect, true)}",
}.AsSuccess(this.ctx))); }.AsSuccess(this.ctx)));
@ -1708,7 +1714,7 @@ public abstract class BaseCommand
Description = $"**`{ctx.Prefix}{ctx.Command.Name}{(ctx.RawArgumentString != "" ? $" {ctx.RawArgumentString.SanitizeForCode().Replace("\\", "")}" : "")}` is not a valid way of using this command.**\nUse it like this instead: `{ctx.Prefix}{ctx.Command.GenerateUsage()}`\n\nArguments wrapped in `[]` are optional while arguments wrapped in `<>` are required.\n**Do not include the brackets when using commands, they're merely an indicator for requirement.**", Description = $"**`{ctx.Prefix}{ctx.Command.Name}{(ctx.RawArgumentString != "" ? $" {ctx.RawArgumentString.SanitizeForCode().Replace("\\", "")}" : "")}` is not a valid way of using this command.**\nUse it like this instead: `{ctx.Prefix}{ctx.Command.GenerateUsage()}`\n\nArguments wrapped in `[]` are optional while arguments wrapped in `<>` are required.\n**Do not include the brackets when using commands, they're merely an indicator for requirement.**",
}.AsError(this.ctx); }.AsError(this.ctx);
_ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed).WithContent(this.ctx.User.Mention)); _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed).WithContent(this.ctx.User.Mention));
} }
#endregion #endregion
} }

View file

@ -60,7 +60,7 @@ internal sealed class ActionLogCommand : BaseCommand
var ChangeChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), $"{(ctx.DbGuild.ActionLog.Channel == 0 ? this.GetString(CommandKey.SetChannelButton) : this.GetString(CommandKey.ChangeChannelButton))}", false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬"))); var ChangeChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), $"{(ctx.DbGuild.ActionLog.Channel == 0 ? this.GetString(CommandKey.SetChannelButton) : this.GetString(CommandKey.ChangeChannelButton))}", false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬")));
var ChangeFilter = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeFilterButton), (ctx.DbGuild.ActionLog.Channel == 0), new DiscordComponentEmoji(DiscordEmoji.FromUnicode("📣"))); var ChangeFilter = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeFilterButton), (ctx.DbGuild.ActionLog.Channel == 0), new DiscordComponentEmoji(DiscordEmoji.FromUnicode("📣")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
{ Disable } { Disable }
@ -153,7 +153,7 @@ internal sealed class ActionLogCommand : BaseCommand
new(this.GetString(CommandKey.InviteModifications), "log_invites_modified", null, ctx.DbGuild.ActionLog.InvitesModified, new DiscordComponentEmoji(EmojiTemplates.GetInvite(ctx.Bot))), new(this.GetString(CommandKey.InviteModifications), "log_invites_modified", null, ctx.DbGuild.ActionLog.InvitesModified, new DiscordComponentEmoji(EmojiTemplates.GetInvite(ctx.Bot))),
}; };
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed).AddComponents(new DiscordStringSelectComponent(this.GetString(CommandKey.NoOptions), Selections, Guid.NewGuid().ToString(), 0, Selections.Count, false))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed).AddComponents(new DiscordStringSelectComponent(this.GetString(CommandKey.NoOptions), Selections, Guid.NewGuid().ToString(), 0, Selections.Count, false)));
var e = await ctx.Client.GetInteractivity().WaitForSelectAsync(ctx.ResponseMessage, x => x.User.Id == ctx.User.Id, ComponentType.StringSelect, TimeSpan.FromMinutes(2)); var e = await ctx.Client.GetInteractivity().WaitForSelectAsync(ctx.ResponseMessage, x => x.User.Id == ctx.User.Id, ComponentType.StringSelect, TimeSpan.FromMinutes(2));

View file

@ -47,7 +47,7 @@ internal sealed class AutoCrosspostCommand : BaseCommand
var AddButton = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.AddChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode(""))); var AddButton = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.AddChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("")));
var RemoveButton = new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(CommandKey.RemoveChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("✖"))); var RemoveButton = new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(CommandKey.RemoveChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("✖")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
ExcludeBots, ExcludeBots,
@ -96,7 +96,7 @@ internal sealed class AutoCrosspostCommand : BaseCommand
{ {
if (ModalResult.Exception.GetType() == typeof(InvalidOperationException)) if (ModalResult.Exception.GetType() == typeof(InvalidOperationException))
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.WithDescription(this.GetString(CommandKey.DurationLimit, true)).AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.WithDescription(this.GetString(CommandKey.DurationLimit, true)).AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
@ -123,7 +123,7 @@ internal sealed class AutoCrosspostCommand : BaseCommand
{ {
embed.Description = this.GetString(CommandKey.ChannelLimit, true, new TVar("Invite", ctx.Bot.status.DevelopmentServerInvite)); embed.Description = this.GetString(CommandKey.ChannelLimit, true, new TVar("Invite", ctx.Bot.status.DevelopmentServerInvite));
embed = embed.AsError(ctx, this.GetString(CommandKey.Title)); embed = embed.AsError(ctx, this.GetString(CommandKey.Title));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
@ -156,7 +156,7 @@ internal sealed class AutoCrosspostCommand : BaseCommand
if (ChannelResult.Result.Type != ChannelType.News) if (ChannelResult.Result.Type != ChannelType.News)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.WithDescription(this.GetString(this.t.Commands.Common.Errors.NoChannels, true)).AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.WithDescription(this.GetString(this.t.Commands.Common.Errors.NoChannels, true)).AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;

View file

@ -41,7 +41,7 @@ internal sealed class AutoUnarchiveCommand : BaseCommand
var Add = new DiscordButtonComponent(ButtonStyle.Success, Guid.NewGuid().ToString(), this.GetString(CommandKey.AddChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode(""))); var Add = new DiscordButtonComponent(ButtonStyle.Success, Guid.NewGuid().ToString(), this.GetString(CommandKey.AddChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("")));
var Remove = new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(CommandKey.RemoveChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("✖"))); var Remove = new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(CommandKey.RemoveChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("✖")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
Add, Add,

View file

@ -42,7 +42,7 @@ internal sealed class BumpReminderCommand : BaseCommand
var ChangeChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeChannelButton), ctx.DbGuild.BumpReminder.ChannelId == 0, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬"))); var ChangeChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeChannelButton), ctx.DbGuild.BumpReminder.ChannelId == 0, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬")));
var ChangeRole = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeRoleButton), ctx.DbGuild.BumpReminder.ChannelId == 0, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤"))); var ChangeRole = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeRoleButton), ctx.DbGuild.BumpReminder.ChannelId == 0, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithDescription(GetCurrentConfiguration(ctx)).AsAwaitingInput(ctx, this.GetString(CommandKey.Title))) .WithDescription(GetCurrentConfiguration(ctx)).AsAwaitingInput(ctx, this.GetString(CommandKey.Title)))
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {

View file

@ -40,7 +40,7 @@ internal sealed class EmbedMessageCommand : BaseCommand
var ToggleMsg = new DiscordButtonComponent((ctx.DbGuild.EmbedMessage.UseEmbedding ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleMessageLinkButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬"))); var ToggleMsg = new DiscordButtonComponent((ctx.DbGuild.EmbedMessage.UseEmbedding ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleMessageLinkButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬")));
var ToggleGithub = new DiscordButtonComponent((ctx.DbGuild.EmbedMessage.UseGithubEmbedding ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleGithubCodeButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🤖"))); var ToggleGithub = new DiscordButtonComponent((ctx.DbGuild.EmbedMessage.UseGithubEmbedding ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleGithubCodeButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🤖")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
ToggleMsg, ToggleMsg,

View file

@ -37,7 +37,7 @@ internal sealed class ExperienceCommand : BaseCommand
Description = GetCurrentConfiguration(ctx) Description = GetCurrentConfiguration(ctx)
}.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)); }.AsAwaitingInput(ctx, this.GetString(CommandKey.Title));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
var ToggleExperienceSystem = new DiscordButtonComponent((ctx.DbGuild.Experience.UseExperience ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleExperienceButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("✨"))); var ToggleExperienceSystem = new DiscordButtonComponent((ctx.DbGuild.Experience.UseExperience ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleExperienceButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("✨")));
var ToggleBumperBoost = new DiscordButtonComponent((ctx.DbGuild.Experience.BoostXpForBumpReminder ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleExperienceBoostButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("⏫"))); var ToggleBumperBoost = new DiscordButtonComponent((ctx.DbGuild.Experience.BoostXpForBumpReminder ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleExperienceBoostButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("⏫")));

View file

@ -40,7 +40,7 @@ internal sealed class InVoicePrivacyCommand : BaseCommand
var ToggleDeletion = new DiscordButtonComponent((ctx.DbGuild.InVoiceTextPrivacy.ClearTextEnabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleMessageDeletionButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🗑"))); var ToggleDeletion = new DiscordButtonComponent((ctx.DbGuild.InVoiceTextPrivacy.ClearTextEnabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleMessageDeletionButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🗑")));
var TogglePermission = new DiscordButtonComponent((ctx.DbGuild.InVoiceTextPrivacy.SetPermissionsEnabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.TogglePermissionProtectionButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("📋"))); var TogglePermission = new DiscordButtonComponent((ctx.DbGuild.InVoiceTextPrivacy.SetPermissionsEnabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.TogglePermissionProtectionButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("📋")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
ToggleDeletion, ToggleDeletion,

View file

@ -39,7 +39,7 @@ internal sealed class InviteNotesCommand : BaseCommand
if (!(ctx.DbGuild.InviteNotes.Notes.Length > 19)) if (!(ctx.DbGuild.InviteNotes.Notes.Length > 19))
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
AddButton, AddButton,
@ -48,7 +48,7 @@ internal sealed class InviteNotesCommand : BaseCommand
} }
else else
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> { RemoveButton }).AddComponents(MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot))); .AddComponents(new List<DiscordComponent> { RemoveButton }).AddComponents(MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot)));
} }
@ -81,7 +81,7 @@ internal sealed class InviteNotesCommand : BaseCommand
$"`{this.GetString(CommandKey.Invite).PadRight(pad)}`: `{(SelectedInvite is null ? this.GetString(this.t.Common.NotSelected) : $"{SelectedInvite.Code}")}`" $"`{this.GetString(CommandKey.Invite).PadRight(pad)}`: `{(SelectedInvite is null ? this.GetString(this.t.Common.NotSelected) : $"{SelectedInvite.Code}")}`"
}.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)); }.AsAwaitingInput(ctx, this.GetString(CommandKey.Title));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> { SelectTextButton, SelectInviteButton, Finish }) .AddComponents(new List<DiscordComponent> { SelectTextButton, SelectInviteButton, Finish })
.AddComponents(MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot))); .AddComponents(MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot)));

View file

@ -34,7 +34,7 @@ internal sealed class InviteTrackerCommand : BaseCommand
var Toggle = new DiscordButtonComponent((ctx.DbGuild.InviteTracker.Enabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleInviteTrackerButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("📲"))); var Toggle = new DiscordButtonComponent((ctx.DbGuild.InviteTracker.Enabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleInviteTrackerButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("📲")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
Toggle Toggle

View file

@ -26,6 +26,8 @@ internal sealed class JoinCommand : BaseCommand
var pad = TranslationUtil.CalculatePadding(ctx.DbUser, var pad = TranslationUtil.CalculatePadding(ctx.DbUser,
CommandKey.Autoban, CommandKey.Autoban,
CommandKey.JoinLogChannel, CommandKey.JoinLogChannel,
CommandKey.UserCountChannel,
CommandKey.UserCountChannelFormat,
CommandKey.Role, CommandKey.Role,
CommandKey.ReApplyRoles, CommandKey.ReApplyRoles,
CommandKey.ReApplyNickname, CommandKey.ReApplyNickname,
@ -35,6 +37,7 @@ internal sealed class JoinCommand : BaseCommand
return $"{"🌐".UnicodeToEmoji()} `{CommandKey.Autoban.Get(ctx.DbUser).PadRight(pad)}`: {ctx.DbGuild.Join.AutoBanGlobalBans.ToEmote(ctx.Bot)}\n" + return $"{"🌐".UnicodeToEmoji()} `{CommandKey.Autoban.Get(ctx.DbUser).PadRight(pad)}`: {ctx.DbGuild.Join.AutoBanGlobalBans.ToEmote(ctx.Bot)}\n" +
$"{"👋".UnicodeToEmoji()} `{CommandKey.JoinLogChannel.Get(ctx.DbUser).PadRight(pad)}`: {(ctx.DbGuild.Join.JoinlogChannelId != 0 ? $"<#{ctx.DbGuild.Join.JoinlogChannelId}>" : false.ToEmote(ctx.Bot))}\n" + $"{"👋".UnicodeToEmoji()} `{CommandKey.JoinLogChannel.Get(ctx.DbUser).PadRight(pad)}`: {(ctx.DbGuild.Join.JoinlogChannelId != 0 ? $"<#{ctx.DbGuild.Join.JoinlogChannelId}>" : false.ToEmote(ctx.Bot))}\n" +
$"{"🔢".UnicodeToEmoji()} `{CommandKey.UserCountChannel.Get(ctx.DbUser).PadRight(pad)}`: {(ctx.DbGuild.Join.UserCountChannelId != 0 ? $"<#{ctx.DbGuild.Join.UserCountChannelId}> (`{(ctx.DbGuild.Join.UserCountChannelFormat is not null ? ctx.DbGuild.Join.UserCountChannelFormat : "Users: %s")}`)" : false.ToEmote(ctx.Bot))}\n" +
$"{"👤".UnicodeToEmoji()} `{CommandKey.Role.Get(ctx.DbUser).PadRight(pad)}`: {(ctx.DbGuild.Join.AutoAssignRoleId != 0 ? $"<@&{ctx.DbGuild.Join.AutoAssignRoleId}>" : false.ToEmote(ctx.Bot))}\n" + $"{"👤".UnicodeToEmoji()} `{CommandKey.Role.Get(ctx.DbUser).PadRight(pad)}`: {(ctx.DbGuild.Join.AutoAssignRoleId != 0 ? $"<@&{ctx.DbGuild.Join.AutoAssignRoleId}>" : false.ToEmote(ctx.Bot))}\n" +
$"{"👥".UnicodeToEmoji()} `{CommandKey.ReApplyRoles.Get(ctx.DbUser).PadRight(pad)}`: {ctx.DbGuild.Join.ReApplyRoles.ToEmote(ctx.Bot)}\n" + $"{"👥".UnicodeToEmoji()} `{CommandKey.ReApplyRoles.Get(ctx.DbUser).PadRight(pad)}`: {ctx.DbGuild.Join.ReApplyRoles.ToEmote(ctx.Bot)}\n" +
$"{"💬".UnicodeToEmoji()} `{CommandKey.ReApplyNickname.Get(ctx.DbUser).PadRight(pad)}`: {ctx.DbGuild.Join.ReApplyNickname.ToEmote(ctx.Bot)}\n\n" + $"{"💬".UnicodeToEmoji()} `{CommandKey.ReApplyNickname.Get(ctx.DbUser).PadRight(pad)}`: {ctx.DbGuild.Join.ReApplyNickname.ToEmote(ctx.Bot)}\n\n" +
@ -53,10 +56,12 @@ internal sealed class JoinCommand : BaseCommand
Description = GetCurrentConfiguration(ctx) Description = GetCurrentConfiguration(ctx)
}.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)); }.AsAwaitingInput(ctx, this.GetString(CommandKey.Title));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
var ToggleGlobalban = new DiscordButtonComponent((ctx.DbGuild.Join.AutoBanGlobalBans ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleGlobalBansButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🌐"))); var ToggleGlobalban = new DiscordButtonComponent((ctx.DbGuild.Join.AutoBanGlobalBans ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleGlobalBansButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🌐")));
var ChangeJoinlogChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeJoinlogChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👋"))); var ChangeJoinlogChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeJoinlogChannelButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👋")));
var ChangeUserCountChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeUserCountChannel), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🔢")));
var ChangeUserCountFormat = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeUserCountChannelFormat), ctx.DbGuild.Join.UserCountChannelId == 0, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🔢")));
var ChangeRoleOnJoin = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeRoleButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤"))); var ChangeRoleOnJoin = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeRoleButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤")));
var ToggleReApplyRoles = new DiscordButtonComponent((ctx.DbGuild.Join.ReApplyRoles ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleReApplyRole), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👥"))); var ToggleReApplyRoles = new DiscordButtonComponent((ctx.DbGuild.Join.ReApplyRoles ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleReApplyRole), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👥")));
var ToggleReApplyName = new DiscordButtonComponent((ctx.DbGuild.Join.ReApplyNickname ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleReApplyNickname), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬"))); var ToggleReApplyName = new DiscordButtonComponent((ctx.DbGuild.Join.ReApplyNickname ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleReApplyNickname), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬")));
@ -76,6 +81,8 @@ internal sealed class JoinCommand : BaseCommand
{ {
ChangeJoinlogChannel, ChangeJoinlogChannel,
ChangeRoleOnJoin, ChangeRoleOnJoin,
ChangeUserCountChannel,
ChangeUserCountFormat,
}) })
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
@ -93,7 +100,8 @@ internal sealed class JoinCommand : BaseCommand
return; return;
} }
_ = e.Result.Interaction.CreateResponseAsync(InteractionResponseType.DeferredMessageUpdate); if (e.GetCustomId() != ChangeUserCountFormat.CustomId)
_ = e.Result.Interaction.CreateResponseAsync(InteractionResponseType.DeferredMessageUpdate);
if (e.GetCustomId() == ToggleGlobalban.CustomId) if (e.GetCustomId() == ToggleGlobalban.CustomId)
{ {
@ -156,6 +164,87 @@ internal sealed class JoinCommand : BaseCommand
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
} }
else if (e.GetCustomId() == ChangeUserCountChannel.CustomId)
{
var ChannelResult = await this.PromptChannelSelection(ChannelType.Text, new ChannelPromptConfiguration
{
CreateChannelOption = new()
{
Name = "tmp-usercount",
ChannelType = ChannelType.Text
},
DisableOption = this.GetString(CommandKey.DisableUserCountChannel)
});
if (ChannelResult.TimedOut)
{
this.ModifyToTimedOut(true);
return;
}
else if (ChannelResult.Cancelled)
{
await this.ExecuteCommand(ctx, arguments);
return;
}
else if (ChannelResult.Failed)
{
if (ChannelResult.Exception.GetType() == typeof(NullReferenceException))
{
_ = await this.RespondOrEdit(new DiscordEmbedBuilder().AsError(ctx).WithDescription(this.GetString(this.t.Commands.Common.Errors.NoChannels)));
await Task.Delay(3000);
await this.ExecuteCommand(ctx, arguments);
return;
}
throw ChannelResult.Exception;
}
ctx.DbGuild.Join.UserCountChannelId = ChannelResult.Result is null ? 0 : ChannelResult.Result.Id;
if (ChannelResult.Result is not null)
await JoinEvents.RunUserCountUpdater(ctx.Bot, ctx.Guild);
await this.ExecuteCommand(ctx, arguments);
return;
}
else if (e.GetCustomId() == ChangeUserCountFormat.CustomId)
{
var modelResult = await this.PromptModalWithRetry(e.Result.Interaction,
new DiscordInteractionModalBuilder(this.GetString(CommandKey.ChangeUserCountChannelFormat))
.AddTextComponent(new DiscordTextComponent(TextComponentStyle.Small, "new_format", this.GetString(CommandKey.ChangeUserCountChannelFormatModal), null, 2, 16)),
false);
if (modelResult.TimedOut)
{
this.ModifyToTimedOut(true);
return;
}
else if (modelResult.Cancelled)
{
await this.ExecuteCommand(ctx, arguments);
return;
}
else if (modelResult.Failed)
{
if (modelResult.Exception.GetType() == typeof(NullReferenceException))
{
_ = await this.RespondOrEdit(new DiscordEmbedBuilder().AsError(ctx).WithDescription(this.GetString(this.t.Commands.Common.Errors.NoChannels)));
await Task.Delay(3000);
await this.ExecuteCommand(ctx, arguments);
return;
}
throw modelResult.Exception;
}
ctx.DbGuild.Join.UserCountChannelFormat = modelResult.Result.Interaction.GetModalValueByCustomId("new_format");
if (ctx.DbGuild.Join.UserCountChannelId != 0)
await JoinEvents.RunUserCountUpdater(ctx.Bot, ctx.Guild);
await this.ExecuteCommand(ctx, arguments);
return;
}
else if (e.GetCustomId() == ChangeRoleOnJoin.CustomId) else if (e.GetCustomId() == ChangeRoleOnJoin.CustomId)
{ {
var RoleResult = await this.PromptRoleSelection(new RolePromptConfiguration { CreateRoleOption = this.GetString(CommandKey.AutoAssignRoleName), DisableOption = this.GetString(CommandKey.DisableRoleOnJoin) }); var RoleResult = await this.PromptRoleSelection(new RolePromptConfiguration { CreateRoleOption = this.GetString(CommandKey.AutoAssignRoleName), DisableOption = this.GetString(CommandKey.DisableRoleOnJoin) });

View file

@ -112,7 +112,7 @@ internal sealed class LevelRewardsCommand : BaseCommand
var Dropdown = new DiscordStringSelectComponent(this.GetString(CommandKey.SelectDropdown), DefinedRewards.Skip(CurrentPage * 20).Take(20).ToList(), "RewardSelection"); var Dropdown = new DiscordStringSelectComponent(this.GetString(CommandKey.SelectDropdown), DefinedRewards.Skip(CurrentPage * 20).Take(20).ToList(), "RewardSelection");
embed = embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)); embed = embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
if (DefinedRewards.Count > 0) if (DefinedRewards.Count > 0)
_ = builder.AddComponents(Dropdown); _ = builder.AddComponents(Dropdown);
@ -196,7 +196,7 @@ internal sealed class LevelRewardsCommand : BaseCommand
$"`{this.GetString(CommandKey.Message).PadRight(pad)}`: `{selectedCustomText}`" $"`{this.GetString(CommandKey.Message).PadRight(pad)}`: `{selectedCustomText}`"
}.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)); }.AsAwaitingInput(ctx, this.GetString(CommandKey.Title));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed)
.AddComponents(new List<DiscordComponent> { SelectRole, SelectLevel, SelectCustomText, Finish }) .AddComponents(new List<DiscordComponent> { SelectRole, SelectLevel, SelectCustomText, Finish })
.AddComponents(MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot))); .AddComponents(MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot)));
@ -316,7 +316,7 @@ internal sealed class LevelRewardsCommand : BaseCommand
if (newMessage.Length > 256) if (newMessage.Length > 256)
{ {
action_embed.Description = this.GetString(CommandKey.MessageTooLong, true); action_embed.Description = this.GetString(CommandKey.MessageTooLong, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(3000); await Task.Delay(3000);
continue; continue;
} }
@ -342,7 +342,7 @@ internal sealed class LevelRewardsCommand : BaseCommand
}); });
action_embed.Description = this.GetString(CommandKey.AddedNewReward, true, new TVar("Role", $"<@&{selectedRole.Id}>"), new TVar("Level", selectedLevel)); action_embed.Description = this.GetString(CommandKey.AddedNewReward, true, new TVar("Role", $"<@&{selectedRole.Id}>"), new TVar("Level", selectedLevel));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsSuccess(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsSuccess(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await RefreshMessage(); await RefreshMessage();
@ -391,7 +391,7 @@ internal sealed class LevelRewardsCommand : BaseCommand
if (result.Length > 256) if (result.Length > 256)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.WithDescription(this.GetString(CommandKey.MessageTooLong, true)).AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.WithDescription(this.GetString(CommandKey.MessageTooLong, true)).AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;

View file

@ -35,7 +35,7 @@ internal sealed class NameNormalizerCommand : BaseCommand
var Toggle = new DiscordButtonComponent((ctx.DbGuild.NameNormalizer.NameNormalizerEnabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleNameNormalizer), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬"))); var Toggle = new DiscordButtonComponent((ctx.DbGuild.NameNormalizer.NameNormalizerEnabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleNameNormalizer), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬")));
var SearchAllNames = new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(CommandKey.NormalizeNow), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🔨"))); var SearchAllNames = new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(CommandKey.NormalizeNow), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🔨")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
Toggle, Toggle,
@ -64,7 +64,7 @@ internal sealed class NameNormalizerCommand : BaseCommand
{ {
if (ctx.DbGuild.NameNormalizer.NameNormalizerRunning) if (ctx.DbGuild.NameNormalizer.NameNormalizerRunning)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title)) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title))
.WithDescription(this.GetString(CommandKey.NormalizerRunning, true)))); .WithDescription(this.GetString(CommandKey.NormalizerRunning, true))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
@ -78,7 +78,7 @@ internal sealed class NameNormalizerCommand : BaseCommand
try try
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsLoading(ctx, this.GetString(CommandKey.Title)) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsLoading(ctx, this.GetString(CommandKey.Title))
.WithDescription(this.GetString(CommandKey.RenamingAllMembers, true)))); .WithDescription(this.GetString(CommandKey.RenamingAllMembers, true))));
var members = await ctx.Guild.GetAllMembersAsync(); var members = await ctx.Guild.GetAllMembersAsync();
@ -101,7 +101,7 @@ internal sealed class NameNormalizerCommand : BaseCommand
} }
} }
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title)) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title))
.WithDescription(this.GetString(CommandKey.RenamedMembers, true, new TVar("Count", Renamed))))); .WithDescription(this.GetString(CommandKey.RenamedMembers, true, new TVar("Count", Renamed)))));
await Task.Delay(5000); await Task.Delay(5000);
ctx.DbGuild.NameNormalizer.NameNormalizerRunning = false; ctx.DbGuild.NameNormalizer.NameNormalizerRunning = false;

View file

@ -73,7 +73,7 @@ internal sealed class PhishingCommand : BaseCommand
var ChangeReasonButton = new DiscordButtonComponent(ButtonStyle.Secondary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangePunishmentReason), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬"))); var ChangeReasonButton = new DiscordButtonComponent(ButtonStyle.Secondary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangePunishmentReason), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬")));
var ChangeTimeoutLengthButton = new DiscordButtonComponent(ButtonStyle.Secondary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeTimeoutLength), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🕒"))); var ChangeTimeoutLengthButton = new DiscordButtonComponent(ButtonStyle.Secondary, Guid.NewGuid().ToString(), this.GetString(CommandKey.ChangeTimeoutLength), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🕒")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
{ ToggleDetectionButton }, { ToggleDetectionButton },
@ -188,7 +188,7 @@ internal sealed class PhishingCommand : BaseCommand
{ {
if (ctx.DbGuild.PhishingDetection.PunishmentType != PhishingPunishmentType.Timeout) if (ctx.DbGuild.PhishingDetection.PunishmentType != PhishingPunishmentType.Timeout)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.WithDescription(this.GetString(CommandKey.NotUsingType, true, new TVar("Type", this.GetString(CommandKey.PunishmentTypeTimeout)))))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.WithDescription(this.GetString(CommandKey.NotUsingType, true, new TVar("Type", this.GetString(CommandKey.PunishmentTypeTimeout))))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
@ -211,7 +211,7 @@ internal sealed class PhishingCommand : BaseCommand
{ {
if (ModalResult.Exception.GetType() == typeof(InvalidOperationException)) if (ModalResult.Exception.GetType() == typeof(InvalidOperationException))
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.WithDescription(this.GetString(CommandKey.InvalidDuration, true)).AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.WithDescription(this.GetString(CommandKey.InvalidDuration, true)).AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;

View file

@ -36,7 +36,7 @@ internal sealed class PrefixCommand : BaseCommand
var TogglePrefixCommands = new DiscordButtonComponent((ctx.DbGuild.PrefixSettings.PrefixDisabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(this.t.Commands.Config.PrefixConfigCommand.TogglePrefixCommands), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("⌨"))); var TogglePrefixCommands = new DiscordButtonComponent((ctx.DbGuild.PrefixSettings.PrefixDisabled ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(this.t.Commands.Config.PrefixConfigCommand.TogglePrefixCommands), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("⌨")));
var ChangePrefix = new DiscordButtonComponent(ButtonStyle.Secondary, Guid.NewGuid().ToString(), this.GetString(this.t.Commands.Config.PrefixConfigCommand.ChangePrefix), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🗝"))); var ChangePrefix = new DiscordButtonComponent(ButtonStyle.Secondary, Guid.NewGuid().ToString(), this.GetString(this.t.Commands.Config.PrefixConfigCommand.ChangePrefix), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🗝")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
{ TogglePrefixCommands }, { TogglePrefixCommands },

View file

@ -78,7 +78,7 @@ internal sealed class AddCommand : BaseCommand
case Enums.CommandType.ContextMenu: case Enums.CommandType.ContextMenu:
{ {
embed.Description = this.GetString(CommandKey.SelectRolePrompt, true); embed.Description = this.GetString(CommandKey.SelectRolePrompt, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title))));
var RoleResult = await this.PromptRoleSelection(); var RoleResult = await this.PromptRoleSelection();
if (RoleResult.TimedOut) if (RoleResult.TimedOut)
@ -122,7 +122,7 @@ internal sealed class AddCommand : BaseCommand
case Enums.CommandType.ContextMenu: case Enums.CommandType.ContextMenu:
{ {
embed.Description = this.GetString(CommandKey.ReactWithEmoji, true); embed.Description = this.GetString(CommandKey.ReactWithEmoji, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title))));
var emoji_wait = await ctx.Client.GetInteractivity().WaitForReactionAsync(x => x.Channel.Id == ctx.Channel.Id && x.User.Id == ctx.User.Id && x.Message.Id == message.Id, TimeSpan.FromMinutes(2)); var emoji_wait = await ctx.Client.GetInteractivity().WaitForReactionAsync(x => x.Channel.Id == ctx.Channel.Id && x.User.Id == ctx.User.Id && x.Message.Id == message.Id, TimeSpan.FromMinutes(2));
@ -141,7 +141,7 @@ internal sealed class AddCommand : BaseCommand
if (emoji_parameter.Id != 0 && !ctx.Guild.Emojis.ContainsKey(emoji_parameter.Id)) if (emoji_parameter.Id != 0 && !ctx.Guild.Emojis.ContainsKey(emoji_parameter.Id))
{ {
embed.Description = this.GetString(CommandKey.NoAccessToEmoji); embed.Description = this.GetString(CommandKey.NoAccessToEmoji);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title))));
return; return;
} }
@ -157,28 +157,28 @@ internal sealed class AddCommand : BaseCommand
if (ctx.DbGuild.ReactionRoles.Length > 100) if (ctx.DbGuild.ReactionRoles.Length > 100)
{ {
embed.Description = this.GetString(CommandKey.ReactionRoleLimitReached, true); embed.Description = this.GetString(CommandKey.ReactionRoleLimitReached, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title))));
return; return;
} }
if (emoji_parameter.Id != 0 && !ctx.Guild.Emojis.ContainsKey(emoji_parameter.Id)) if (emoji_parameter.Id != 0 && !ctx.Guild.Emojis.ContainsKey(emoji_parameter.Id))
{ {
embed.Description = this.GetString(CommandKey.NoAccessToEmoji, true); embed.Description = this.GetString(CommandKey.NoAccessToEmoji, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title))));
return; return;
} }
if (ctx.DbGuild.ReactionRoles.Any(x => (x.MessageId == message.Id && x.EmojiName == emoji_parameter.GetUniqueDiscordName()))) if (ctx.DbGuild.ReactionRoles.Any(x => (x.MessageId == message.Id && x.EmojiName == emoji_parameter.GetUniqueDiscordName())))
{ {
embed.Description = this.GetString(CommandKey.EmojiAlreadyUsed, true); embed.Description = this.GetString(CommandKey.EmojiAlreadyUsed, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title))));
return; return;
} }
if (ctx.DbGuild.ReactionRoles.Any(x => x.RoleId == role_parameter.Id)) if (ctx.DbGuild.ReactionRoles.Any(x => x.RoleId == role_parameter.Id))
{ {
embed.Description = this.GetString(CommandKey.RoleAlreadyUsed, true); embed.Description = this.GetString(CommandKey.RoleAlreadyUsed, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title))));
return; return;
} }
@ -198,7 +198,7 @@ internal sealed class AddCommand : BaseCommand
new TVar("User", message.Author.Mention), new TVar("User", message.Author.Mention),
new TVar("Channel", message.Channel.Mention), new TVar("Channel", message.Channel.Mention),
new TVar("Emoji", emoji_parameter)); new TVar("Emoji", emoji_parameter));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title))));
}); });
} }
} }

View file

@ -37,7 +37,7 @@ internal sealed class ConfigCommand : BaseCommand
Description = this.GetString(CommandKey.ReactionRoleCount, true, new TVar("Count", ctx.DbGuild.ReactionRoles.Length)) Description = this.GetString(CommandKey.ReactionRoleCount, true, new TVar("Count", ctx.DbGuild.ReactionRoles.Length))
}.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)); }.AsAwaitingInput(ctx, this.GetString(CommandKey.Title));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
AddButton, RemoveButton AddButton, RemoveButton
@ -80,13 +80,13 @@ internal sealed class ConfigCommand : BaseCommand
if (ctx.DbGuild.ReactionRoles.Length > 100) if (ctx.DbGuild.ReactionRoles.Length > 100)
{ {
action_embed.Description = this.GetString(CommandKey.ReactionRoleLimitReached, true); action_embed.Description = this.GetString(CommandKey.ReactionRoleLimitReached, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
} }
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed)
.AddComponents(new List<DiscordComponent> { SelectMessage, SelectEmoji, SelectRole, Finish }) .AddComponents(new List<DiscordComponent> { SelectMessage, SelectEmoji, SelectRole, Finish })
.AddComponents(MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot))); .AddComponents(MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot)));
@ -132,7 +132,7 @@ internal sealed class ConfigCommand : BaseCommand
$"`https://ptb.discord.com/channels/012345678901234567/012345678901234567/012345678912345678`\n" + $"`https://ptb.discord.com/channels/012345678901234567/012345678901234567/012345678912345678`\n" +
$"`https://canary.discord.com/channels/012345678901234567/012345678901234567/012345678912345678`"; $"`https://canary.discord.com/channels/012345678901234567/012345678901234567/012345678912345678`";
action_embed.ImageUrl = ""; action_embed.ImageUrl = "";
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(3000); await Task.Delay(3000);
continue; continue;
} }
@ -141,7 +141,7 @@ internal sealed class ConfigCommand : BaseCommand
{ {
action_embed.Description = this.GetString(CommandKey.MessageUrlWrongGuild, true); action_embed.Description = this.GetString(CommandKey.MessageUrlWrongGuild, true);
action_embed.ImageUrl = ""; action_embed.ImageUrl = "";
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(3000); await Task.Delay(3000);
continue; continue;
} }
@ -150,7 +150,7 @@ internal sealed class ConfigCommand : BaseCommand
{ {
action_embed.Description = this.GetString(CommandKey.MessageUrlNoChannel, true); action_embed.Description = this.GetString(CommandKey.MessageUrlNoChannel, true);
action_embed.ImageUrl = ""; action_embed.ImageUrl = "";
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(3000); await Task.Delay(3000);
continue; continue;
} }
@ -161,7 +161,7 @@ internal sealed class ConfigCommand : BaseCommand
{ {
action_embed.Description = this.GetString(CommandKey.MessageUrlNoMessage, true); action_embed.Description = this.GetString(CommandKey.MessageUrlNoMessage, true);
action_embed.ImageUrl = ""; action_embed.ImageUrl = "";
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(3000); await Task.Delay(3000);
continue; continue;
} }
@ -175,7 +175,7 @@ internal sealed class ConfigCommand : BaseCommand
action_embed.Description = this.GetString(CommandKey.ReactWithEmoji, true); action_embed.Description = this.GetString(CommandKey.ReactWithEmoji, true);
action_embed.ImageUrl = ""; action_embed.ImageUrl = "";
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title))));
var emoji_wait = await ctx.Client.GetInteractivity().WaitForReactionAsync(x => x.Channel.Id == ctx.Channel.Id && x.User.Id == ctx.User.Id && x.Message.Id == selectedMessage.Id, TimeSpan.FromMinutes(2)); var emoji_wait = await ctx.Client.GetInteractivity().WaitForReactionAsync(x => x.Channel.Id == ctx.Channel.Id && x.User.Id == ctx.User.Id && x.Message.Id == selectedMessage.Id, TimeSpan.FromMinutes(2));
@ -194,7 +194,7 @@ internal sealed class ConfigCommand : BaseCommand
if (emoji.Id != 0 && !ctx.Guild.Emojis.ContainsKey(emoji.Id)) if (emoji.Id != 0 && !ctx.Guild.Emojis.ContainsKey(emoji.Id))
{ {
action_embed.Description = this.GetString(CommandKey.NoAccessToEmoji, true); action_embed.Description = this.GetString(CommandKey.NoAccessToEmoji, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(3000); await Task.Delay(3000);
continue; continue;
} }
@ -202,7 +202,7 @@ internal sealed class ConfigCommand : BaseCommand
if (ctx.DbGuild.ReactionRoles.Any(x => (x.MessageId == selectedMessage.Id && x.EmojiName == emoji.GetUniqueDiscordName()))) if (ctx.DbGuild.ReactionRoles.Any(x => (x.MessageId == selectedMessage.Id && x.EmojiName == emoji.GetUniqueDiscordName())))
{ {
action_embed.Description = this.GetString(CommandKey.EmojiAlreadyUsed, true); action_embed.Description = this.GetString(CommandKey.EmojiAlreadyUsed, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(3000); await Task.Delay(3000);
continue; continue;
} }
@ -242,7 +242,7 @@ internal sealed class ConfigCommand : BaseCommand
if (ctx.DbGuild.ReactionRoles.Any(x => x.RoleId == RoleResult.Result.Id)) if (ctx.DbGuild.ReactionRoles.Any(x => x.RoleId == RoleResult.Result.Id))
{ {
action_embed.Description = this.GetString(CommandKey.RoleAlreadyUsed, true); action_embed.Description = this.GetString(CommandKey.RoleAlreadyUsed, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(3000); await Task.Delay(3000);
continue; continue;
} }
@ -257,7 +257,7 @@ internal sealed class ConfigCommand : BaseCommand
if (ctx.DbGuild.ReactionRoles.Length > 100) if (ctx.DbGuild.ReactionRoles.Length > 100)
{ {
action_embed.Description = this.GetString(CommandKey.ReactionRoleLimitReached, true); action_embed.Description = this.GetString(CommandKey.ReactionRoleLimitReached, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
@ -266,7 +266,7 @@ internal sealed class ConfigCommand : BaseCommand
if (ctx.DbGuild.ReactionRoles.Any(x => x.RoleId == selectedRole.Id)) if (ctx.DbGuild.ReactionRoles.Any(x => x.RoleId == selectedRole.Id))
{ {
action_embed.Description = this.GetString(CommandKey.RoleAlreadyUsed, true); action_embed.Description = this.GetString(CommandKey.RoleAlreadyUsed, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
@ -275,7 +275,7 @@ internal sealed class ConfigCommand : BaseCommand
if (selectedEmoji.Id != 0 && !ctx.Guild.Emojis.ContainsKey(selectedEmoji.Id)) if (selectedEmoji.Id != 0 && !ctx.Guild.Emojis.ContainsKey(selectedEmoji.Id))
{ {
action_embed.Description = this.GetString(CommandKey.NoAccessToEmoji, true); action_embed.Description = this.GetString(CommandKey.NoAccessToEmoji, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
@ -284,7 +284,7 @@ internal sealed class ConfigCommand : BaseCommand
if (ctx.DbGuild.ReactionRoles.Any(x => (x.MessageId == selectedMessage.Id && x.EmojiName == selectedEmoji.GetUniqueDiscordName()))) if (ctx.DbGuild.ReactionRoles.Any(x => (x.MessageId == selectedMessage.Id && x.EmojiName == selectedEmoji.GetUniqueDiscordName())))
{ {
action_embed.Description = this.GetString(CommandKey.EmojiAlreadyUsed, true); action_embed.Description = this.GetString(CommandKey.EmojiAlreadyUsed, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsError(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
@ -306,7 +306,7 @@ internal sealed class ConfigCommand : BaseCommand
new TVar("User", selectedMessage.Author.Mention), new TVar("User", selectedMessage.Author.Mention),
new TVar("Channel", selectedMessage.Channel.Mention), new TVar("Channel", selectedMessage.Channel.Mention),
new TVar("Emoji", selectedEmoji)); new TVar("Emoji", selectedEmoji));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed.AsSuccess(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed.AsSuccess(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;
@ -357,7 +357,7 @@ internal sealed class ConfigCommand : BaseCommand
new TVar("User", reactionMessage?.Author.Mention ?? "`/`"), new TVar("User", reactionMessage?.Author.Mention ?? "`/`"),
new TVar("Channel", reactionMessage?.Channel.Mention ?? "`/`"), new TVar("Channel", reactionMessage?.Channel.Mention ?? "`/`"),
new TVar("Emoji", obj.GetEmoji(ctx.Client))); new TVar("Emoji", obj.GetEmoji(ctx.Client)));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title))));
await Task.Delay(5000); await Task.Delay(5000);
await this.ExecuteCommand(ctx, arguments); await this.ExecuteCommand(ctx, arguments);
return; return;

View file

@ -68,7 +68,7 @@ internal sealed class RemoveAllCommand : BaseCommand
if (!ctx.DbGuild.ReactionRoles.Any(x => x.MessageId == message.Id)) if (!ctx.DbGuild.ReactionRoles.Any(x => x.MessageId == message.Id))
{ {
embed.Description = this.GetString(CommandKey.NoReactionRoles, true); embed.Description = this.GetString(CommandKey.NoReactionRoles, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title))));
return; return;
} }
@ -80,7 +80,7 @@ internal sealed class RemoveAllCommand : BaseCommand
embed.Description = this.GetString(CommandKey.RemovedAllReactionRoles, true, embed.Description = this.GetString(CommandKey.RemovedAllReactionRoles, true,
new TVar("User", message?.Author.Mention ?? "`/`"), new TVar("User", message?.Author.Mention ?? "`/`"),
new TVar("Channel", message?.Channel.Mention ?? "`/`")); new TVar("Channel", message?.Channel.Mention ?? "`/`"));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title))));
}); });
} }
} }

View file

@ -77,7 +77,7 @@ internal sealed class RemoveCommand : BaseCommand
case Enums.CommandType.ContextMenu: case Enums.CommandType.ContextMenu:
{ {
embed.Description = this.GetString(CommandKey.ReactWithEmojiToRemove, true); embed.Description = this.GetString(CommandKey.ReactWithEmojiToRemove, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsAwaitingInput(ctx, this.GetString(CommandKey.Title))));
var emoji_wait = await ctx.Client.GetInteractivity().WaitForReactionAsync(x => x.Channel.Id == ctx.Channel.Id && x.User.Id == ctx.User.Id && x.Message.Id == message.Id, TimeSpan.FromMinutes(2)); var emoji_wait = await ctx.Client.GetInteractivity().WaitForReactionAsync(x => x.Channel.Id == ctx.Channel.Id && x.User.Id == ctx.User.Id && x.Message.Id == message.Id, TimeSpan.FromMinutes(2));
@ -98,7 +98,7 @@ internal sealed class RemoveCommand : BaseCommand
if (!ctx.DbGuild.ReactionRoles.Any(x => x.MessageId == message.Id && x.EmojiName == emoji_parameter.GetUniqueDiscordName())) if (!ctx.DbGuild.ReactionRoles.Any(x => x.MessageId == message.Id && x.EmojiName == emoji_parameter.GetUniqueDiscordName()))
{ {
embed.Description = this.GetString(CommandKey.NoReactionRoleFound); embed.Description = this.GetString(CommandKey.NoReactionRoleFound);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsError(ctx, this.GetString(CommandKey.Title))));
return; return;
} }
@ -116,7 +116,7 @@ internal sealed class RemoveCommand : BaseCommand
new TVar("User", reactionMessage?.Author.Mention ?? "`/`"), new TVar("User", reactionMessage?.Author.Mention ?? "`/`"),
new TVar("Channel", reactionMessage?.Channel.Mention ?? "`/`"), new TVar("Channel", reactionMessage?.Channel.Mention ?? "`/`"),
new TVar("Emoji", obj.GetEmoji(ctx.Client))); new TVar("Emoji", obj.GetEmoji(ctx.Client)));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title)))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsSuccess(ctx, this.GetString(CommandKey.Title))));
}); });
} }
} }

View file

@ -34,7 +34,7 @@ internal sealed class TokenDetectionCommand : BaseCommand
var Toggle = new DiscordButtonComponent((ctx.DbGuild.TokenLeakDetection.DetectTokens ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleTokenDetection), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("⚠"))); var Toggle = new DiscordButtonComponent((ctx.DbGuild.TokenLeakDetection.DetectTokens ? ButtonStyle.Danger : ButtonStyle.Success), Guid.NewGuid().ToString(), this.GetString(CommandKey.ToggleTokenDetection), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("⚠")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
Toggle Toggle

View file

@ -34,7 +34,7 @@ internal sealed class VcCreatorCommand : BaseCommand
var SetChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetVcCreator), false, EmojiTemplates.GetChannel(ctx.Bot).ToComponent()); var SetChannel = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetVcCreator), false, EmojiTemplates.GetChannel(ctx.Bot).ToComponent());
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed)
.AddComponents(new List<DiscordComponent> .AddComponents(new List<DiscordComponent>
{ {
SetChannel SetChannel

View file

@ -1,4 +1,4 @@
// Project Makoto // Project Makoto
// Copyright (C) 2024 Fortunevale // Copyright (C) 2024 Fortunevale
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -180,7 +180,7 @@ public sealed partial class DebugCommands : ApplicationCommandsModule
} }
} }
[SlashCommand("developertools", "Developer Tools used to manage Makoto.", dmPermission: false, defaultMemberPermissions: (long)Permissions.None)] [SlashCommand("developertools", "Developer Tools used to manage Makoto.", defaultMemberPermissions: (long)Permissions.None, allowedContexts: [InteractionContextType.Guild])]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0075:Simplify conditional expression", Justification = "<Pending>")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0075:Simplify conditional expression", Justification = "<Pending>")]
public async Task DevTools(InteractionContext ctx, public async Task DevTools(InteractionContext ctx,
[Autocomplete(typeof(MaintainerAutoComplete))][Option("command", "The command to run.", true)] string command, [Autocomplete(typeof(MaintainerAutoComplete))][Option("command", "The command to run.", true)] string command,

View file

@ -23,7 +23,7 @@ internal sealed class EvaluationCommand : BaseCommand
{ {
if (ctx.CommandType is not Enums.CommandType.ApplicationCommand and not Enums.CommandType.ContextMenu) if (ctx.CommandType is not Enums.CommandType.ApplicationCommand and not Enums.CommandType.ContextMenu)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder().WithDescription("Evaluating CScript has the potential of leaking confidential information. Are you sure you want to run this command as Prefix Command?").AsWarning(ctx)) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder().WithDescription("Evaluating CScript has the potential of leaking confidential information. Are you sure you want to run this command as Prefix Command?").AsWarning(ctx))
.AddComponents(new List<DiscordComponent> { new DiscordButtonComponent(ButtonStyle.Success, "yes", "Yes"), .AddComponents(new List<DiscordComponent> { new DiscordButtonComponent(ButtonStyle.Success, "yes", "Yes"),
new DiscordButtonComponent(ButtonStyle.Danger, "no", "No")})); new DiscordButtonComponent(ButtonStyle.Danger, "no", "No")}));

View file

@ -44,7 +44,7 @@ internal sealed class GlobalNotesCommand : BaseCommand
var RemoveButton = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), "Remove Notes", (!ctx.Bot.globalNotes.ContainsKey(victim.Id)), DiscordEmoji.FromUnicode("").ToComponent()); var RemoveButton = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), "Remove Notes", (!ctx.Bot.globalNotes.ContainsKey(victim.Id)), DiscordEmoji.FromUnicode("").ToComponent());
_ = await this.RespondOrEdit(new DiscordMessageBuilder() _ = await this.RespondOrEdit(new DiscordMessageBuilder()
.WithEmbed(new DiscordEmbedBuilder() .AddEmbed(new DiscordEmbedBuilder()
.WithDescription($"{victim.Mention} `has {(ctx.Bot.globalNotes.TryGetValue(victim.Id, out var noteObj) ? noteObj.Notes.Length : 0)} global notes.`") .WithDescription($"{victim.Mention} `has {(ctx.Bot.globalNotes.TryGetValue(victim.Id, out var noteObj) ? noteObj.Notes.Length : 0)} global notes.`")
.AddFields((noteObj is not null ? noteObj.Notes.Take(20).Select(x => new DiscordEmbedField("󠂪 󠂪", $"{x.Reason.FullSanitize()} - `{(ModeratorCache[x.Moderator] is null ? "Unknown#0000" : ModeratorCache[x.Moderator].GetUsernameWithIdentifier())}` {x.Timestamp.ToTimestamp()}")) : new List<DiscordEmbedField>()))) .AddFields((noteObj is not null ? noteObj.Notes.Take(20).Select(x => new DiscordEmbedField("󠂪 󠂪", $"{x.Reason.FullSanitize()} - `{(ModeratorCache[x.Moderator] is null ? "Unknown#0000" : ModeratorCache[x.Moderator].GetUsernameWithIdentifier())}` {x.Timestamp.ToTimestamp()}")) : new List<DiscordEmbedField>())))
.AddComponents(new List<DiscordComponent> { AddButton, RemoveButton }) .AddComponents(new List<DiscordComponent> { AddButton, RemoveButton })

View file

@ -1,4 +1,4 @@
// Project Makoto // Project Makoto
// Copyright (C) 2024 Fortunevale // Copyright (C) 2024 Fortunevale
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -44,7 +44,7 @@ internal sealed class CustomEmbedCommand : BaseCommand
try try
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(GeneratedEmbed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(GeneratedEmbed)
.AddComponents(new List<DiscordComponent> { SetTitle, SetAuthor, SetThumbnail }) .AddComponents(new List<DiscordComponent> { SetTitle, SetAuthor, SetThumbnail })
.AddComponents(new List<DiscordComponent> { SetDescription, SetImage, SetColor }) .AddComponents(new List<DiscordComponent> { SetDescription, SetImage, SetColor })
.AddComponents(new List<DiscordComponent> { SetFooter, SetTimestamp }) .AddComponents(new List<DiscordComponent> { SetFooter, SetTimestamp })
@ -119,7 +119,7 @@ internal sealed class CustomEmbedCommand : BaseCommand
var SetByUser = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetAsUserButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤"))); var SetByUser = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetAsUserButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤")));
var SetByGuild = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetAsServer), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🖥"))); var SetByGuild = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetAsServer), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🖥")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(GeneratedEmbed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(GeneratedEmbed)
.AddComponents(new List<DiscordComponent> { SetName, SetUrl, SetIcon }) .AddComponents(new List<DiscordComponent> { SetName, SetUrl, SetIcon })
.AddComponents(new List<DiscordComponent> { SetByUser, SetByGuild }) .AddComponents(new List<DiscordComponent> { SetByUser, SetByGuild })
.AddComponents(new List<DiscordComponent> { MessageComponents.GetBackButton(ctx.DbUser, ctx.Bot) })); .AddComponents(new List<DiscordComponent> { MessageComponents.GetBackButton(ctx.DbUser, ctx.Bot) }));
@ -225,7 +225,7 @@ internal sealed class CustomEmbedCommand : BaseCommand
var asset = await (await ctx.Client.GetChannelAsync(ctx.Bot.status.LoadedConfig.Channels.OtherAssets)).SendMessageAsync(new DiscordMessageBuilder().WithContent($"{ctx.User.Mention} `{ctx.User.GetUsernameWithIdentifier()} ({ctx.User.Id})`").WithFile($"{Guid.NewGuid()}.png", stream.stream)); var asset = await (await ctx.Client.GetChannelAsync(ctx.Bot.status.LoadedConfig.Channels.OtherAssets)).SendMessageAsync(new DiscordMessageBuilder().WithContent($"{ctx.User.Mention} `{ctx.User.GetUsernameWithIdentifier()} ({ctx.User.Id})`").WithFile($"{Guid.NewGuid()}.png", stream.stream));
GeneratedEmbed.Author.IconUrl = asset.Attachments[0].Url; GeneratedEmbed.Author.IconUrl = asset.Attachments[0].Url.ToString();
continue; continue;
} }
else if (Menu2.GetCustomId() == SetByUser.CustomId) else if (Menu2.GetCustomId() == SetByUser.CustomId)
@ -320,7 +320,7 @@ internal sealed class CustomEmbedCommand : BaseCommand
var asset = await (await ctx.Client.GetChannelAsync(ctx.Bot.status.LoadedConfig.Channels.OtherAssets)).SendMessageAsync(new DiscordMessageBuilder().WithContent($"{ctx.User.Mention} `{ctx.User.GetUsernameWithIdentifier()} ({ctx.User.Id})`").WithFile($"{Guid.NewGuid()}.png", stream.stream)); var asset = await (await ctx.Client.GetChannelAsync(ctx.Bot.status.LoadedConfig.Channels.OtherAssets)).SendMessageAsync(new DiscordMessageBuilder().WithContent($"{ctx.User.Mention} `{ctx.User.GetUsernameWithIdentifier()} ({ctx.User.Id})`").WithFile($"{Guid.NewGuid()}.png", stream.stream));
GeneratedEmbed.Thumbnail.Url = asset.Attachments[0].Url; GeneratedEmbed.Thumbnail.Url = asset.Attachments[0].Url.ToString();
continue; continue;
} }
else if (Menu1.GetCustomId() == SetDescription.CustomId) else if (Menu1.GetCustomId() == SetDescription.CustomId)
@ -384,7 +384,7 @@ internal sealed class CustomEmbedCommand : BaseCommand
var asset = await (await ctx.Client.GetChannelAsync(ctx.Bot.status.LoadedConfig.Channels.OtherAssets)).SendMessageAsync(new DiscordMessageBuilder().WithContent($"{ctx.User.Mention} `{ctx.User.GetUsernameWithIdentifier()} ({ctx.User.Id})`").WithFile($"{Guid.NewGuid()}.png", stream.stream)); var asset = await (await ctx.Client.GetChannelAsync(ctx.Bot.status.LoadedConfig.Channels.OtherAssets)).SendMessageAsync(new DiscordMessageBuilder().WithContent($"{ctx.User.Mention} `{ctx.User.GetUsernameWithIdentifier()} ({ctx.User.Id})`").WithFile($"{Guid.NewGuid()}.png", stream.stream));
GeneratedEmbed.ImageUrl = asset.Attachments[0].Url; GeneratedEmbed.ImageUrl = asset.Attachments[0].Url.ToString();
continue; continue;
} }
else if (Menu1.GetCustomId() == SetColor.CustomId) else if (Menu1.GetCustomId() == SetColor.CustomId)
@ -425,7 +425,7 @@ internal sealed class CustomEmbedCommand : BaseCommand
var SetByUser = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetAsUserButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤"))); var SetByUser = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetAsUserButton), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤")));
var SetByGuild = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetAsServer), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🖥"))); var SetByGuild = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(CommandKey.SetAsServer), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🖥")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(GeneratedEmbed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(GeneratedEmbed)
.AddComponents(new List<DiscordComponent> { SetText, SetIcon }) .AddComponents(new List<DiscordComponent> { SetText, SetIcon })
.AddComponents(new List<DiscordComponent> { SetByUser, SetByGuild }) .AddComponents(new List<DiscordComponent> { SetByUser, SetByGuild })
.AddComponents(new List<DiscordComponent> { MessageComponents.GetBackButton(ctx.DbUser, ctx.Bot) })); .AddComponents(new List<DiscordComponent> { MessageComponents.GetBackButton(ctx.DbUser, ctx.Bot) }));
@ -499,7 +499,7 @@ internal sealed class CustomEmbedCommand : BaseCommand
var asset = await (await ctx.Client.GetChannelAsync(ctx.Bot.status.LoadedConfig.Channels.OtherAssets)).SendMessageAsync(new DiscordMessageBuilder().WithContent($"{ctx.User.Mention} `{ctx.User.GetUsernameWithIdentifier()} ({ctx.User.Id})`").WithFile($"{Guid.NewGuid()}.png", stream.stream)); var asset = await (await ctx.Client.GetChannelAsync(ctx.Bot.status.LoadedConfig.Channels.OtherAssets)).SendMessageAsync(new DiscordMessageBuilder().WithContent($"{ctx.User.Mention} `{ctx.User.GetUsernameWithIdentifier()} ({ctx.User.Id})`").WithFile($"{Guid.NewGuid()}.png", stream.stream));
GeneratedEmbed.Footer.IconUrl = asset.Attachments[0].Url; GeneratedEmbed.Footer.IconUrl = asset.Attachments[0].Url.ToString();
continue; continue;
} }
else if (Menu2.GetCustomId() == SetByUser.CustomId) else if (Menu2.GetCustomId() == SetByUser.CustomId)

View file

@ -31,7 +31,7 @@ internal sealed class GuildPurgeCommand : BaseCommand
return; return;
} }
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder(). _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder().
WithDescription(this.GetString(CommandKey.Scanning, true, new TVar("Victim", victim.Mention))) WithDescription(this.GetString(CommandKey.Scanning, true, new TVar("Victim", victim.Mention)))
.AsLoading(ctx))); .AsLoading(ctx)));
@ -49,7 +49,7 @@ internal sealed class GuildPurgeCommand : BaseCommand
currentProg++; currentProg++;
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder(). _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder().
WithDescription($"{this.GetString(CommandKey.Scanning, true, new TVar("Victim", victim.Mention))}\n" + WithDescription($"{this.GetString(CommandKey.Scanning, true, new TVar("Victim", victim.Mention))}\n" +
$"`{StringTools.GenerateASCIIProgressbar(currentProg, maxProg)} {MathTools.CalculatePercentage(currentProg, maxProg),3}%`") $"`{StringTools.GenerateASCIIProgressbar(currentProg, maxProg)} {MathTools.CalculatePercentage(currentProg, maxProg),3}%`")
.AsLoading(ctx))); .AsLoading(ctx)));
@ -118,7 +118,7 @@ internal sealed class GuildPurgeCommand : BaseCommand
if (message.CreationTimestamp.GetTimespanSince() > TimeSpan.FromDays(14)) if (message.CreationTimestamp.GetTimespanSince() > TimeSpan.FromDays(14))
_ = channel.Value.Remove(message); _ = channel.Value.Remove(message);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithDescription($"{this.GetString(CommandKey.Deleting, true, new TVar("Victim", victim.Mention), new TVar("Count", allMsg))}\n" + .WithDescription($"{this.GetString(CommandKey.Deleting, true, new TVar("Victim", victim.Mention), new TVar("Count", allMsg))}\n" +
$"`{StringTools.GenerateASCIIProgressbar(currentProg, maxProg)} {MathTools.CalculatePercentage(currentProg, maxProg)}%`") $"`{StringTools.GenerateASCIIProgressbar(currentProg, maxProg)} {MathTools.CalculatePercentage(currentProg, maxProg)}%`")
.AsLoading(ctx))); .AsLoading(ctx)));
@ -133,7 +133,7 @@ internal sealed class GuildPurgeCommand : BaseCommand
{ {
try try
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithDescription($"{this.GetString(CommandKey.Deleting, true, new TVar("Victim", victim.Mention), new TVar("Count", allMsg))}\n" + .WithDescription($"{this.GetString(CommandKey.Deleting, true, new TVar("Victim", victim.Mention), new TVar("Count", allMsg))}\n" +
$"`{StringTools.GenerateASCIIProgressbar(currentProg, maxProg)} {MathTools.CalculatePercentage(currentProg, maxProg)}%`") $"`{StringTools.GenerateASCIIProgressbar(currentProg, maxProg)} {MathTools.CalculatePercentage(currentProg, maxProg)}%`")
.AsLoading(ctx))); .AsLoading(ctx)));
@ -149,7 +149,7 @@ internal sealed class GuildPurgeCommand : BaseCommand
catch { } catch { }
} }
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithDescription(this.GetString(CommandKey.Ended, true, new TVar("Victim", victim.Mention), new TVar("Min", currentProg), new TVar("Max", maxProg), new TVar("ChannelCount", channelList.Count))) .WithDescription(this.GetString(CommandKey.Ended, true, new TVar("Victim", victim.Mention), new TVar("Min", currentProg), new TVar("Max", maxProg), new TVar("ChannelCount", channelList.Count)))
.AsSuccess(ctx))); .AsSuccess(ctx)));
}); });

View file

@ -28,7 +28,7 @@ internal sealed class ManualBumpCommand : BaseCommand
DiscordButtonComponent YesButton = new(ButtonStyle.Success, Guid.NewGuid().ToString(), this.GetString(this.t.Common.Yes), false, DiscordEmoji.FromUnicode("✅").ToComponent()); DiscordButtonComponent YesButton = new(ButtonStyle.Success, Guid.NewGuid().ToString(), this.GetString(this.t.Common.Yes), false, DiscordEmoji.FromUnicode("✅").ToComponent());
_ = await this.RespondOrEdit(new DiscordMessageBuilder() _ = await this.RespondOrEdit(new DiscordMessageBuilder()
.WithEmbed(new DiscordEmbedBuilder().WithDescription(this.GetString(CommandKey.Warning, true)).AsWarning(ctx)) .AddEmbed(new DiscordEmbedBuilder().WithDescription(this.GetString(CommandKey.Warning, true)).AsWarning(ctx))
.AddComponents(new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(this.t.Common.No), false, DiscordEmoji.FromUnicode("❌").ToComponent()), YesButton)); .AddComponents(new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(this.t.Common.No), false, DiscordEmoji.FromUnicode("❌").ToComponent()), YesButton));
var e = await ctx.ResponseMessage.WaitForButtonAsync(ctx.User); var e = await ctx.ResponseMessage.WaitForButtonAsync(ctx.User);

View file

@ -37,7 +37,7 @@ internal sealed class AvatarCommand : BaseCommand
var ServerProfilePictureButton = new DiscordButtonComponent(ButtonStyle.Secondary, "ShowServer", this.GetString(this.t.Commands.Utility.Avatar.ShowServerProfile), (string.IsNullOrWhiteSpace(member?.GuildAvatarHash)), new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🖥"))); var ServerProfilePictureButton = new DiscordButtonComponent(ButtonStyle.Secondary, "ShowServer", this.GetString(this.t.Commands.Utility.Avatar.ShowServerProfile), (string.IsNullOrWhiteSpace(member?.GuildAvatarHash)), new DiscordComponentEmoji(DiscordEmoji.FromUnicode("🖥")));
var ProfilePictureButton = new DiscordButtonComponent(ButtonStyle.Secondary, "ShowProfile", this.GetString(this.t.Commands.Utility.Avatar.ShowUserProfile), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤"))); var ProfilePictureButton = new DiscordButtonComponent(ButtonStyle.Secondary, "ShowProfile", this.GetString(this.t.Commands.Utility.Avatar.ShowUserProfile), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("👤")));
var builder = new DiscordMessageBuilder().WithEmbed(embed).AddComponents(ServerProfilePictureButton); var builder = new DiscordMessageBuilder().AddEmbed(embed).AddComponents(ServerProfilePictureButton);
var msg = await this.RespondOrEdit(builder); var msg = await this.RespondOrEdit(builder);
@ -77,12 +77,12 @@ internal sealed class AvatarCommand : BaseCommand
if (e.GetCustomId() == ServerProfilePictureButton.CustomId) if (e.GetCustomId() == ServerProfilePictureButton.CustomId)
{ {
embed.ImageUrl = member.GuildAvatarUrl; embed.ImageUrl = member.GuildAvatarUrl;
_ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed).AddComponents(ProfilePictureButton)); _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed).AddComponents(ProfilePictureButton));
} }
else if (e.GetCustomId() == ProfilePictureButton.CustomId) else if (e.GetCustomId() == ProfilePictureButton.CustomId)
{ {
embed.ImageUrl = member.AvatarUrl; embed.ImageUrl = member.AvatarUrl;
_ = this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed).AddComponents(ServerProfilePictureButton)); _ = this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed).AddComponents(ServerProfilePictureButton));
} }
} }
}).Add(ctx.Bot, ctx); }).Add(ctx.Bot, ctx);

View file

@ -29,7 +29,7 @@ internal sealed class BannerCommand : BaseCommand
Description = victim.BannerUrl.IsNullOrWhiteSpace() ? this.GetString(this.t.Commands.Utility.Banner.NoBanner, true) : "" Description = victim.BannerUrl.IsNullOrWhiteSpace() ? this.GetString(this.t.Commands.Utility.Banner.NoBanner, true) : ""
}.AsInfo(ctx, this.GetString(this.t.Commands.Utility.Banner.Banner, false, new TVar("User", victim.GetUsernameWithIdentifier()))); }.AsInfo(ctx, this.GetString(this.t.Commands.Utility.Banner.Banner, false, new TVar("User", victim.GetUsernameWithIdentifier())));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
_ = await this.RespondOrEdit(builder); _ = await this.RespondOrEdit(builder);
}); });

View file

@ -23,7 +23,7 @@ internal sealed class DeleteCommand : BaseCommand
if (ctx.Bot.objectedUsers.Contains(ctx.User.Id)) if (ctx.Bot.objectedUsers.Contains(ctx.User.Id))
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Utility.Data.Object.ProfileAlreadyDeleted, true) Description = this.GetString(this.t.Commands.Utility.Data.Object.ProfileAlreadyDeleted, true)
}.AsAwaitingInput(ctx)).AddComponents(new List<DiscordComponent> { Yes, No })); }.AsAwaitingInput(ctx)).AddComponents(new List<DiscordComponent> { Yes, No }));
@ -75,7 +75,7 @@ internal sealed class DeleteCommand : BaseCommand
if (ctx.DbUser.Data.DeletionRequested) if (ctx.DbUser.Data.DeletionRequested)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Utility.Data.Object.DeletionAlreadyScheduled, true, Description = this.GetString(this.t.Commands.Utility.Data.Object.DeletionAlreadyScheduled, true,
new TVar("RequestTimestamp", ctx.DbUser.Data.DeletionRequestDate.AddDays(-14).ToTimestamp()), new TVar("RequestTimestamp", ctx.DbUser.Data.DeletionRequestDate.AddDays(-14).ToTimestamp()),
@ -110,7 +110,7 @@ internal sealed class DeleteCommand : BaseCommand
return; return;
} }
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Utility.Data.Object.ObjectionDisclaimer, true, true) Description = this.GetString(this.t.Commands.Utility.Data.Object.ObjectionDisclaimer, true, true)
}.AsAwaitingInput(ctx)).AddComponents(new List<DiscordComponent> { Yes, No })); }.AsAwaitingInput(ctx)).AddComponents(new List<DiscordComponent> { Yes, No }));
@ -127,7 +127,7 @@ internal sealed class DeleteCommand : BaseCommand
if (Menu.GetCustomId() == Yes.CustomId) if (Menu.GetCustomId() == Yes.CustomId)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = $"**{this.GetString(this.t.Commands.Utility.Data.Object.SecondaryConfirm, true)}**" Description = $"**{this.GetString(this.t.Commands.Utility.Data.Object.SecondaryConfirm, true)}**"
}.AsAwaitingInput(ctx)).AddComponents(new List<DiscordComponent> { No, Yes })); }.AsAwaitingInput(ctx)).AddComponents(new List<DiscordComponent> { No, Yes }));

View file

@ -55,7 +55,7 @@ internal sealed class RequestCommand : BaseCommand
{ {
case Enums.CommandType.ApplicationCommand: case Enums.CommandType.ApplicationCommand:
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Utility.Data.Request.Confirm, true) Description = this.GetString(this.t.Commands.Utility.Data.Request.Confirm, true)
}.AsSuccess(ctx)).WithFile("userdata.json", stream)); }.AsSuccess(ctx)).WithFile("userdata.json", stream));
@ -66,7 +66,7 @@ internal sealed class RequestCommand : BaseCommand
{ {
try try
{ {
_ = await ctx.User.SendMessageAsync(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder _ = await ctx.User.SendMessageAsync(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Utility.Data.Request.Confirm, true) Description = this.GetString(this.t.Commands.Utility.Data.Request.Confirm, true)
}.AsSuccess(ctx)).WithFile("userdata.json", stream)); }.AsSuccess(ctx)).WithFile("userdata.json", stream));

View file

@ -198,7 +198,7 @@ internal sealed class EmojiStealerCommand : BaseCommand
var SendHereButton = new DiscordButtonComponent(ButtonStyle.Secondary, "SendHere", this.GetString(this.t.Commands.Utility.EmojiStealer.CurrentChatZip), !(ctx.Member.Permissions.HasPermission(Permissions.AttachFiles)), new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬"))); var SendHereButton = new DiscordButtonComponent(ButtonStyle.Secondary, "SendHere", this.GetString(this.t.Commands.Utility.EmojiStealer.CurrentChatZip), !(ctx.Member.Permissions.HasPermission(Permissions.AttachFiles)), new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬")));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
if (SanitizedEmoteList.Any(x => x.Value.EntryType == EmojiType.STICKER)) if (SanitizedEmoteList.Any(x => x.Value.EntryType == EmojiType.STICKER))
_ = builder.AddComponents(IncludeStickersButton); _ = builder.AddComponents(IncludeStickersButton);
@ -268,7 +268,7 @@ internal sealed class EmojiStealerCommand : BaseCommand
new TVar("Min", 0), new TVar("Min", 0),
new TVar("Max", (IncludeStickers ? SanitizedEmoteList.Count : SanitizedEmoteList.Where(x => x.Value.EntryType == EmojiType.EMOJI).Count()))); new TVar("Max", (IncludeStickers ? SanitizedEmoteList.Count : SanitizedEmoteList.Where(x => x.Value.EntryType == EmojiType.EMOJI).Count())));
_ = embed.AsLoading(ctx); _ = embed.AsLoading(ctx);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed));
for (var i = 0; i < SanitizedEmoteList.Count; i++) for (var i = 0; i < SanitizedEmoteList.Count; i++)
{ {
@ -369,7 +369,7 @@ internal sealed class EmojiStealerCommand : BaseCommand
embed.Description = this.GetString(this.t.Commands.Utility.EmojiStealer.SendingDm, true, new TVar("Type", emojiText)); embed.Description = this.GetString(this.t.Commands.Utility.EmojiStealer.SendingDm, true, new TVar("Type", emojiText));
_ = embed.AsLoading(ctx); _ = embed.AsLoading(ctx);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed));
try try
{ {
@ -416,7 +416,7 @@ internal sealed class EmojiStealerCommand : BaseCommand
cancellationTokenSource.Cancel(); cancellationTokenSource.Cancel();
embed.Description = this.GetString(this.t.Commands.Utility.EmojiStealer.PreparingZip, true); embed.Description = this.GetString(this.t.Commands.Utility.EmojiStealer.PreparingZip, true);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed.AsLoading(ctx))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed.AsLoading(ctx)));
using (var archive = new ZipArchive(zipFileStream, ZipArchiveMode.Create, true)) using (var archive = new ZipArchive(zipFileStream, ZipArchiveMode.Create, true))
{ {
@ -476,7 +476,7 @@ internal sealed class EmojiStealerCommand : BaseCommand
new TVar("Type", emojiText)); new TVar("Type", emojiText));
_ = zipFileStream.Seek(0, SeekOrigin.Begin); _ = zipFileStream.Seek(0, SeekOrigin.Begin);
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithFile($"Emotes.zip", zipFileStream).WithEmbed(embed.AsSuccess(ctx))); _ = await this.RespondOrEdit(new DiscordMessageBuilder().WithFile($"Emotes.zip", zipFileStream).AddEmbed(embed.AsSuccess(ctx)));
} }
return; return;
} }
@ -493,7 +493,7 @@ internal sealed class EmojiStealerCommand : BaseCommand
IncludeStickersButton = new DiscordButtonComponent((IncludeStickers ? ButtonStyle.Success : ButtonStyle.Danger), "ToggleStickers", this.GetString(this.t.Commands.Utility.EmojiStealer.ToggleStickers), !SanitizedEmoteList.Any(x => x.Value.EntryType == EmojiType.EMOJI), new DiscordComponentEmoji(DiscordEmoji.FromGuildEmote(ctx.Client, (ulong)(IncludeStickers ? 970278964755038248 : 970278964079767574)))); IncludeStickersButton = new DiscordButtonComponent((IncludeStickers ? ButtonStyle.Success : ButtonStyle.Danger), "ToggleStickers", this.GetString(this.t.Commands.Utility.EmojiStealer.ToggleStickers), !SanitizedEmoteList.Any(x => x.Value.EntryType == EmojiType.EMOJI), new DiscordComponentEmoji(DiscordEmoji.FromGuildEmote(ctx.Client, (ulong)(IncludeStickers ? 970278964755038248 : 970278964079767574))));
AddToServerButton = new DiscordButtonComponent(ButtonStyle.Success, "AddToServer", (IncludeStickers ? this.GetString(this.t.Commands.Utility.EmojiStealer.AddEmojisAndStickerToServer) : this.GetString(this.t.Commands.Utility.EmojiStealer.AddEmojisToServer)), !ctx.Member.Permissions.HasPermission(Permissions.ManageGuildExpressions), new DiscordComponentEmoji(DiscordEmoji.FromUnicode(""))); AddToServerButton = new DiscordButtonComponent(ButtonStyle.Success, "AddToServer", (IncludeStickers ? this.GetString(this.t.Commands.Utility.EmojiStealer.AddEmojisAndStickerToServer) : this.GetString(this.t.Commands.Utility.EmojiStealer.AddEmojisToServer)), !ctx.Member.Permissions.HasPermission(Permissions.ManageGuildExpressions), new DiscordComponentEmoji(DiscordEmoji.FromUnicode("")));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
if (SanitizedEmoteList.Any(x => x.Value.EntryType == EmojiType.STICKER)) if (SanitizedEmoteList.Any(x => x.Value.EntryType == EmojiType.STICKER))
_ = builder.AddComponents(IncludeStickersButton); _ = builder.AddComponents(IncludeStickersButton);

View file

@ -108,13 +108,13 @@ internal sealed class GuildInfoCommand : BaseCommand
if (guild.RawFeatures.Count > 0) if (guild.RawFeatures.Count > 0)
_ = embed.AddField(new DiscordEmbedField(this.GetString(CommandKey.GuildFeatures), $"{string.Join(", ", guild.RawFeatures.Select(x => $"`{string.Join(" ", x.Replace("_", " ").ToLower().Split(" ").Select(x => x.FirstLetterToUpper()))}`"))}")); _ = embed.AddField(new DiscordEmbedField(this.GetString(CommandKey.GuildFeatures), $"{string.Join(", ", guild.RawFeatures.Select(x => $"`{string.Join(" ", x.Replace("_", " ").ToLower().Split(" ").Select(x => x.FirstLetterToUpper()))}`"))}"));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
if (!guild.VanityUrlCode.IsNullOrWhiteSpace()) if (!guild.VanityUrlCode.IsNullOrWhiteSpace())
_ = builder.AddComponents(new DiscordLinkButtonComponent($"https://discord.gg/{guild.VanityUrlCode}", this.GetString(CommandKey.JoinServer), false, DiscordEmoji.FromUnicode("🔗").ToComponent())); _ = builder.AddComponents(new DiscordLinkButtonComponent($"https://discord.gg/{guild.VanityUrlCode}", this.GetString(CommandKey.JoinServer), false, DiscordEmoji.FromUnicode("🔗").ToComponent()));
_ = await this.RespondOrEdit(new DiscordMessageBuilder() _ = await this.RespondOrEdit(new DiscordMessageBuilder()
.WithEmbed(embed) .AddEmbed(embed)
.AddComponents(new DiscordLinkButtonComponent(guild.BannerUrl ?? "https://discord.gg", this.GetString(CommandKey.Banner), guild.BannerUrl is null), .AddComponents(new DiscordLinkButtonComponent(guild.BannerUrl ?? "https://discord.gg", this.GetString(CommandKey.Banner), guild.BannerUrl is null),
new DiscordLinkButtonComponent(guild.SplashUrl ?? "https://discord.gg", this.GetString(CommandKey.Splash), guild.BannerUrl is null), new DiscordLinkButtonComponent(guild.SplashUrl ?? "https://discord.gg", this.GetString(CommandKey.Splash), guild.BannerUrl is null),
new DiscordLinkButtonComponent(guild.DiscoverySplashUrl ?? "https://discord.gg", this.GetString(CommandKey.DiscoverySplash), guild.BannerUrl is null), new DiscordLinkButtonComponent(guild.DiscoverySplashUrl ?? "https://discord.gg", this.GetString(CommandKey.DiscoverySplash), guild.BannerUrl is null),
@ -127,7 +127,7 @@ internal sealed class GuildInfoCommand : BaseCommand
// using (var file = new FileStream($"cache/{imageHash}", FileMode.Open, FileAccess.Read)) // using (var file = new FileStream($"cache/{imageHash}", FileMode.Open, FileAccess.Read))
// { // {
// _ = await this.RespondOrEdit(new DiscordMessageBuilder() // _ = await this.RespondOrEdit(new DiscordMessageBuilder()
// .WithEmbed(embed) // .AddEmbed(embed)
// .WithFile("banner.png", file)); // .WithFile("banner.png", file));
// } // }
//} //}
@ -162,7 +162,7 @@ internal sealed class GuildInfoCommand : BaseCommand
_ = embed.AddField(new DiscordEmbedField(this.GetString(CommandKey.GuildFeatures), $"{string.Join(", ", preview.Features.Select(x => $"`{string.Join(" ", x.Replace("_", " ").ToLower().Split(" ").Select(x => x.FirstLetterToUpper()))}`"))}")); _ = embed.AddField(new DiscordEmbedField(this.GetString(CommandKey.GuildFeatures), $"{string.Join(", ", preview.Features.Select(x => $"`{string.Join(" ", x.Replace("_", " ").ToLower().Split(" ").Select(x => x.FirstLetterToUpper()))}`"))}"));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
var invite = ""; var invite = "";
@ -187,7 +187,7 @@ internal sealed class GuildInfoCommand : BaseCommand
_ = embed.AddField(new DiscordEmbedField(this.GetString(CommandKey.MemberTitle), $"🟢 `{widget.PresenceCount}` **{this.GetString(CommandKey.OnlineMembers)}**\n")); _ = embed.AddField(new DiscordEmbedField(this.GetString(CommandKey.MemberTitle), $"🟢 `{widget.PresenceCount}` **{this.GetString(CommandKey.OnlineMembers)}**\n"));
var builder = new DiscordMessageBuilder().WithEmbed(embed); var builder = new DiscordMessageBuilder().AddEmbed(embed);
if (!widget.InstantInviteUrl.IsNullOrWhiteSpace()) if (!widget.InstantInviteUrl.IsNullOrWhiteSpace())
_ = builder.AddComponents(new DiscordLinkButtonComponent(widget.InstantInviteUrl, this.GetString(CommandKey.JoinServer), false, DiscordEmoji.FromUnicode("🔗").ToComponent())); _ = builder.AddComponents(new DiscordLinkButtonComponent(widget.InstantInviteUrl, this.GetString(CommandKey.JoinServer), false, DiscordEmoji.FromUnicode("🔗").ToComponent()));

View file

@ -177,7 +177,7 @@ internal sealed class HelpCommand : BaseCommand
var PreviousButton = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(this.t.Common.PreviousPage), (Page <= 0), DiscordEmoji.FromUnicode("◀").ToComponent()); var PreviousButton = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(this.t.Common.PreviousPage), (Page <= 0), DiscordEmoji.FromUnicode("◀").ToComponent());
var NextButton = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(this.t.Common.NextPage), (Page >= discordEmbeds.Count - 1), DiscordEmoji.FromUnicode("▶").ToComponent()); var NextButton = new DiscordButtonComponent(ButtonStyle.Primary, Guid.NewGuid().ToString(), this.GetString(this.t.Common.NextPage), (Page >= discordEmbeds.Count - 1), DiscordEmoji.FromUnicode("▶").ToComponent());
var builder = new DiscordMessageBuilder().WithEmbed(discordEmbeds.ElementAt(Page)); var builder = new DiscordMessageBuilder().AddEmbed(discordEmbeds.ElementAt(Page));
if (!PreviousButton.Disabled || !NextButton.Disabled) if (!PreviousButton.Disabled || !NextButton.Disabled)
_ = builder.AddComponents(PreviousButton, NextButton); _ = builder.AddComponents(PreviousButton, NextButton);

View file

@ -14,7 +14,7 @@ internal sealed class LeaderboardCommand : BaseCommand
{ {
return Task.Run(async () => return Task.Run(async () =>
{ {
var ShowAmount = (int)arguments["amount"]; var ShowAmount = arguments.ContainsKey("amount") ? (int)arguments["amount"] : 10;
if (await ctx.DbUser.Cooldown.WaitForModerate(ctx)) if (await ctx.DbUser.Cooldown.WaitForModerate(ctx))
return; return;

View file

@ -34,7 +34,7 @@ internal sealed class RemindersCommand : BaseCommand
if (snoozeDescription is null) if (snoozeDescription is null)
{ {
_ = await this.RespondOrEdit(new DiscordMessageBuilder() _ = await this.RespondOrEdit(new DiscordMessageBuilder()
.WithEmbed(new DiscordEmbedBuilder() .AddEmbed(new DiscordEmbedBuilder()
.WithDescription($"{this.GetString(this.t.Commands.Utility.Reminders.Count, true, new TVar("Count", rem.ScheduledReminders.Length))}\n\n" + .WithDescription($"{this.GetString(this.t.Commands.Utility.Reminders.Count, true, new TVar("Count", rem.ScheduledReminders.Length))}\n\n" +
$"{string.Join("\n\n", rem.ScheduledReminders.Select(x => $"> {x.Description.FullSanitize()}\n{this.GetString(this.t.Commands.Utility.Reminders.CreatedOn, new TVar("Guild", $"**{x.CreationPlace}**"))}\n{this.GetString(this.t.Commands.Utility.Reminders.DueTime, new TVar("Relative", x.DueTime.ToTimestamp()), new TVar("DateTime", x.DueTime.ToTimestamp(TimestampFormat.LongDateTime)))}").ToList())}\n\n" + $"{string.Join("\n\n", rem.ScheduledReminders.Select(x => $"> {x.Description.FullSanitize()}\n{this.GetString(this.t.Commands.Utility.Reminders.CreatedOn, new TVar("Guild", $"**{x.CreationPlace}**"))}\n{this.GetString(this.t.Commands.Utility.Reminders.DueTime, new TVar("Relative", x.DueTime.ToTimestamp()), new TVar("DateTime", x.DueTime.ToTimestamp(TimestampFormat.LongDateTime)))}").ToList())}\n\n" +
$"**⚠ {this.GetString(this.t.Commands.Utility.Reminders.Notice)}**") $"**⚠ {this.GetString(this.t.Commands.Utility.Reminders.Notice)}**")
@ -80,7 +80,7 @@ internal sealed class RemindersCommand : BaseCommand
$"`{this.GetString(this.t.Commands.Utility.Reminders.DateTime).PadRight(padding)}`: {(selectedDueDate is null ? $"`{this.GetString(this.t.Common.NotSelected)}`" : $"{selectedDueDate.Value.ToTimestamp(TimestampFormat.LongDateTime)} ({selectedDueDate.Value.ToTimestamp()})")}" $"`{this.GetString(this.t.Commands.Utility.Reminders.DateTime).PadRight(padding)}`: {(selectedDueDate is null ? $"`{this.GetString(this.t.Common.NotSelected)}`" : $"{selectedDueDate.Value.ToTimestamp(TimestampFormat.LongDateTime)} ({selectedDueDate.Value.ToTimestamp()})")}"
}.AsAwaitingInput(ctx, this.GetString(this.t.Commands.Utility.Reminders.Title)); }.AsAwaitingInput(ctx, this.GetString(this.t.Commands.Utility.Reminders.Title));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(action_embed) _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(action_embed)
.AddComponents(new List<DiscordComponent> { SelectDescriptionButton, SelectDueDateButton, Finish }) .AddComponents(new List<DiscordComponent> { SelectDescriptionButton, SelectDueDateButton, Finish })
.AddComponents(MessageComponents.GetBackButton(ctx.DbUser, ctx.Bot))); .AddComponents(MessageComponents.GetBackButton(ctx.DbUser, ctx.Bot)));

View file

@ -40,7 +40,7 @@ internal sealed class ReportHostCommand : BaseCommand
tos_embed.Description = tos_embed.Description.Insert(0, $"**{this.GetString(this.t.Commands.Utility.ReportHost.TosChangedNotice)}**\n\n"); tos_embed.Description = tos_embed.Description.Insert(0, $"**{this.GetString(this.t.Commands.Utility.ReportHost.TosChangedNotice)}**\n\n");
} }
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(tos_embed).AddComponents(button)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(tos_embed).AddComponents(button));
var TosAccept = await ctx.WaitForButtonAsync(TimeSpan.FromMinutes(2)); var TosAccept = await ctx.WaitForButtonAsync(TimeSpan.FromMinutes(2));
@ -100,7 +100,7 @@ internal sealed class ReportHostCommand : BaseCommand
var ContinueButton = new DiscordButtonComponent(ButtonStyle.Success, Guid.NewGuid().ToString(), this.GetString(this.t.Common.Confirm), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("✅"))); var ContinueButton = new DiscordButtonComponent(ButtonStyle.Success, Guid.NewGuid().ToString(), this.GetString(this.t.Common.Confirm), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("✅")));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(embed).AddComponents(new List<DiscordComponent> _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(embed).AddComponents(new List<DiscordComponent>
{ {
{ ContinueButton }, { ContinueButton },
{ MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot) } { MessageComponents.GetCancelButton(ctx.DbUser, ctx.Bot) }
@ -158,7 +158,7 @@ internal sealed class ReportHostCommand : BaseCommand
var BanUserButton = new DiscordButtonComponent(ButtonStyle.Danger, "ban_user", "Deny submission & ban submitter", false, new DiscordComponentEmoji(DiscordEmoji.FromGuildEmote(ctx.Client, 1005430134070841395))); var BanUserButton = new DiscordButtonComponent(ButtonStyle.Danger, "ban_user", "Deny submission & ban submitter", false, new DiscordComponentEmoji(DiscordEmoji.FromGuildEmote(ctx.Client, 1005430134070841395)));
var BanGuildButton = new DiscordButtonComponent(ButtonStyle.Danger, "ban_guild", "Deny submission & ban guild", false, new DiscordComponentEmoji(DiscordEmoji.FromGuildEmote(ctx.Client, 1005430134070841395))); var BanGuildButton = new DiscordButtonComponent(ButtonStyle.Danger, "ban_guild", "Deny submission & ban guild", false, new DiscordComponentEmoji(DiscordEmoji.FromGuildEmote(ctx.Client, 1005430134070841395)));
var submittedMsg = await channel.SendMessageAsync(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder var submittedMsg = await channel.SendMessageAsync(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Author = new DiscordEmbedBuilder.EmbedAuthor { IconUrl = StatusIndicatorIcons.Success, Name = this.GetString(this.t.Commands.Utility.ReportHost.Title) }, Author = new DiscordEmbedBuilder.EmbedAuthor { IconUrl = StatusIndicatorIcons.Success, Name = this.GetString(this.t.Commands.Utility.ReportHost.Title) },
Color = EmbedColors.Success, Color = EmbedColors.Success,

View file

@ -49,7 +49,7 @@ internal sealed class ReportTranslationCommand : BaseCommand
tos_embed.Description = tos_embed.Description.Insert(0, $"**{this.GetString(CommandKey.TosChangedNotice)}**\n\n"); tos_embed.Description = tos_embed.Description.Insert(0, $"**{this.GetString(CommandKey.TosChangedNotice)}**\n\n");
} }
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(tos_embed).AddComponents(button)); _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(tos_embed).AddComponents(button));
var TosAccept = await ctx.WaitForButtonAsync(TimeSpan.FromMinutes(2)); var TosAccept = await ctx.WaitForButtonAsync(TimeSpan.FromMinutes(2));

View file

@ -32,7 +32,7 @@ internal sealed class UrbanDictionaryCommand : BaseCommand
var Yes = new DiscordButtonComponent(ButtonStyle.Success, Guid.NewGuid().ToString(), this.GetString(this.t.Common.Yes), false, new DiscordComponentEmoji(true.ToEmote(ctx.Bot))); var Yes = new DiscordButtonComponent(ButtonStyle.Success, Guid.NewGuid().ToString(), this.GetString(this.t.Common.Yes), false, new DiscordComponentEmoji(true.ToEmote(ctx.Bot)));
var No = new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(this.t.Common.No), false, new DiscordComponentEmoji(false.ToEmote(ctx.Bot))); var No = new DiscordButtonComponent(ButtonStyle.Danger, Guid.NewGuid().ToString(), this.GetString(this.t.Common.No), false, new DiscordComponentEmoji(false.ToEmote(ctx.Bot)));
_ = await this.RespondOrEdit(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder _ = await this.RespondOrEdit(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Description = this.GetString(this.t.Commands.Utility.UrbanDictionary.AdultContentWarning, true) Description = this.GetString(this.t.Commands.Utility.UrbanDictionary.AdultContentWarning, true)
}.AsAwaitingInput(ctx)).AddComponents(new List<DiscordComponent> { Yes, No })); }.AsAwaitingInput(ctx)).AddComponents(new List<DiscordComponent> { Yes, No }));

View file

@ -189,7 +189,7 @@ internal sealed class UserInfoCommand : BaseCommand
if (bMember is not null && bMember.CommunicationDisabledUntil.HasValue && bMember.CommunicationDisabledUntil.Value.GetTotalSecondsUntil() > 0) if (bMember is not null && bMember.CommunicationDisabledUntil.HasValue && bMember.CommunicationDisabledUntil.Value.GetTotalSecondsUntil() > 0)
_ = embed.AddField(new DiscordEmbedField(this.GetString(this.t.Commands.Utility.UserInfo.TimedOutUntil), $"{Formatter.Timestamp(bMember.CommunicationDisabledUntil.Value, TimestampFormat.LongDateTime)}", true)); _ = embed.AddField(new DiscordEmbedField(this.GetString(this.t.Commands.Utility.UserInfo.TimedOutUntil), $"{Formatter.Timestamp(bMember.CommunicationDisabledUntil.Value, TimestampFormat.LongDateTime)}", true));
_ = await this.RespondOrEdit(builder.WithEmbed(embed)); _ = await this.RespondOrEdit(builder.AddEmbed(embed));
if (InviterButtonAdded) if (InviterButtonAdded)
{ {

View file

@ -24,6 +24,27 @@ public sealed class JoinSettings(Bot bot, Guild parent) : RequiresParent<Guild>(
get => this.Bot.DatabaseClient.GetValue<ulong>("guilds", "serverid", this.Parent.Id, "joinlog_channel_id", this.Bot.DatabaseClient.mainDatabaseConnection); get => this.Bot.DatabaseClient.GetValue<ulong>("guilds", "serverid", this.Parent.Id, "joinlog_channel_id", this.Bot.DatabaseClient.mainDatabaseConnection);
set => _ = this.Bot.DatabaseClient.SetValue("guilds", "serverid", this.Parent.Id, "joinlog_channel_id", value, this.Bot.DatabaseClient.mainDatabaseConnection); set => _ = this.Bot.DatabaseClient.SetValue("guilds", "serverid", this.Parent.Id, "joinlog_channel_id", value, this.Bot.DatabaseClient.mainDatabaseConnection);
} }
[ColumnName("usercount_channel_last_edit"), ColumnType(ColumnTypes.BigInt), Default("0")]
public DateTime UserCountChannelLastEdit
{
get => this.Bot.DatabaseClient.GetValue<DateTime>("guilds", "serverid", this.Parent.Id, "usercount_channel_last_edit", this.Bot.DatabaseClient.mainDatabaseConnection);
set => _ = this.Bot.DatabaseClient.SetValue("guilds", "serverid", this.Parent.Id, "usercount_channel_last_edit", value, this.Bot.DatabaseClient.mainDatabaseConnection);
}
[ColumnName("usercount_channel_id"), ColumnType(ColumnTypes.BigInt), Default("0")]
public ulong UserCountChannelId
{
get => this.Bot.DatabaseClient.GetValue<ulong>("guilds", "serverid", this.Parent.Id, "usercount_channel_id", this.Bot.DatabaseClient.mainDatabaseConnection);
set => _ = this.Bot.DatabaseClient.SetValue("guilds", "serverid", this.Parent.Id, "usercount_channel_id", value, this.Bot.DatabaseClient.mainDatabaseConnection);
}
[ColumnName("usercount_channel_format"), ColumnType(ColumnTypes.Text), Nullable]
public string? UserCountChannelFormat
{
get => this.Bot.DatabaseClient.GetValue<string?>("guilds", "serverid", this.Parent.Id, "usercount_channel_format", this.Bot.DatabaseClient.mainDatabaseConnection);
set => _ = this.Bot.DatabaseClient.SetValue("guilds", "serverid", this.Parent.Id, "usercount_channel_format", value, this.Bot.DatabaseClient.mainDatabaseConnection);
}
[ColumnName("autoban_global_ban"), ColumnType(ColumnTypes.TinyInt), Default("0")] [ColumnName("autoban_global_ban"), ColumnType(ColumnTypes.TinyInt), Default("0")]
public bool AutoBanGlobalBans public bool AutoBanGlobalBans

View file

@ -52,6 +52,7 @@ public sealed class Status
public EmojiConfig Emojis = new(config); public EmojiConfig Emojis = new(config);
public DiscordConfig Discord = new(config); public DiscordConfig Discord = new(config);
public ChannelsConfig Channels = new(config); public ChannelsConfig Channels = new(config);
public QuickChartConfig QuickChart = new(config);
public sealed class DiscordConfig(Config config) public sealed class DiscordConfig(Config config)
{ {
@ -113,6 +114,13 @@ public sealed class Status
public ulong AbuseIPDB => config.Emojis.AbuseIPDB; public ulong AbuseIPDB => config.Emojis.AbuseIPDB;
public ulong Spotify => config.Emojis.Spotify; public ulong Spotify => config.Emojis.Spotify;
} }
public sealed class QuickChartConfig(Config config)
{
public string? Scheme => config.Secrets.QuickChart.Scheme;
public string? Host = config.Secrets.QuickChart.Host;
public int? Port = config.Secrets.QuickChart.Port;
}
} }
#region Legacy #region Legacy

View file

@ -380,11 +380,15 @@ public class Translations : ITranslations
public SingleTranslationKey CantUseRole; public SingleTranslationKey CantUseRole;
public SingleTranslationKey DisableRoleOnJoin; public SingleTranslationKey DisableRoleOnJoin;
public SingleTranslationKey AutoAssignRoleName; public SingleTranslationKey AutoAssignRoleName;
public SingleTranslationKey DisableUserCountChannel;
public SingleTranslationKey DisableJoinlog; public SingleTranslationKey DisableJoinlog;
public SingleTranslationKey JoinLogChannelName; public SingleTranslationKey JoinLogChannelName;
public SingleTranslationKey ToggleReApplyNickname; public SingleTranslationKey ToggleReApplyNickname;
public SingleTranslationKey ToggleReApplyRole; public SingleTranslationKey ToggleReApplyRole;
public SingleTranslationKey ChangeRoleButton; public SingleTranslationKey ChangeRoleButton;
public SingleTranslationKey ChangeUserCountChannelFormatModal;
public SingleTranslationKey ChangeUserCountChannelFormat;
public SingleTranslationKey ChangeUserCountChannel;
public SingleTranslationKey ChangeJoinlogChannelButton; public SingleTranslationKey ChangeJoinlogChannelButton;
public SingleTranslationKey ToggleGlobalBansButton; public SingleTranslationKey ToggleGlobalBansButton;
public SingleTranslationKey TimeNotice; public SingleTranslationKey TimeNotice;
@ -392,6 +396,8 @@ public class Translations : ITranslations
public SingleTranslationKey ReApplyNickname; public SingleTranslationKey ReApplyNickname;
public SingleTranslationKey ReApplyRoles; public SingleTranslationKey ReApplyRoles;
public SingleTranslationKey Role; public SingleTranslationKey Role;
public SingleTranslationKey UserCountChannelFormat;
public SingleTranslationKey UserCountChannel;
public SingleTranslationKey JoinLogChannel; public SingleTranslationKey JoinLogChannel;
public SingleTranslationKey Autoban; public SingleTranslationKey Autoban;
public SingleTranslationKey Title; public SingleTranslationKey Title;

View file

@ -48,7 +48,7 @@ public sealed class ReminderSettings : RequiresParent<User>
var user = await this.Bot.DiscordClient.GetFirstShard().GetUserAsync(this.Parent.Id); var user = await this.Bot.DiscordClient.GetFirstShard().GetUserAsync(this.Parent.Id);
var builder = new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() var builder = new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithDescription($"> {b.Description.FullSanitize()}\n" + .WithDescription($"> {b.Description.FullSanitize()}\n" +
$"{CommandKey.CreatedOn.Get(this.Bot.Users[user.Id]).Build(new TVar("Guild", b.CreationPlace))}\n" + $"{CommandKey.CreatedOn.Get(this.Bot.Users[user.Id]).Build(new TVar("Guild", b.CreationPlace))}\n" +
$"{CommandKey.CreatedAt.Get(this.Bot.Users[user.Id]).Build(new TVar("Timestamp", $"{b.CreationTime.ToTimestamp()} ({b.CreationTime.ToTimestamp(TimestampFormat.LongDateTime)})"))}\n" + $"{CommandKey.CreatedAt.Get(this.Bot.Users[user.Id]).Build(new TVar("Timestamp", $"{b.CreationTime.ToTimestamp()} ({b.CreationTime.ToTimestamp(TimestampFormat.LongDateTime)})"))}\n" +

View file

@ -1,4 +1,4 @@
// Project Makoto // Project Makoto
// Copyright (C) 2024 Fortunevale // Copyright (C) 2024 Fortunevale
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -42,7 +42,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
$"{string.Join("\n\n", globalNote.Notes.Select(x => $"{x.Reason.FullSanitize()} - <@{x.Moderator}> {x.Timestamp.ToTimestamp()}"))}".TruncateWithIndication(512))); $"{string.Join("\n\n", globalNote.Notes.Select(x => $"{x.Reason.FullSanitize()} - <@{x.Moderator}> {x.Timestamp.ToTimestamp()}"))}".TruncateWithIndication(512)));
} }
var message = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var message = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
await Task.Delay(5000); await Task.Delay(5000);
@ -63,7 +63,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (this.Bot.Guilds[e.Guild.Id].InviteNotes.Notes.Any(x => x.Invite == this.Bot.Guilds[e.Guild.Id].Members[e.Member.Id].InviteTracker.Code)) if (this.Bot.Guilds[e.Guild.Id].InviteNotes.Notes.Any(x => x.Invite == this.Bot.Guilds[e.Guild.Id].Members[e.Member.Id].InviteTracker.Code))
embed.Description += $"**{this.tKey.InviteNote.Get(this.Bot.Guilds[e.Guild.Id])}**: `{this.Bot.Guilds[e.Guild.Id].InviteNotes.Notes.First(x => x.Invite == this.Bot.Guilds[e.Guild.Id].Members[e.Member.Id].InviteTracker.Code).Note.SanitizeForCode()}`"; embed.Description += $"**{this.tKey.InviteNote.Get(this.Bot.Guilds[e.Guild.Id])}**: `{this.Bot.Guilds[e.Guild.Id].InviteNotes.Notes.First(x => x.Invite == this.Bot.Guilds[e.Guild.Id].Members[e.Member.Id].InviteTracker.Code).Note.SanitizeForCode()}`";
_ = message.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = message.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
} }
internal async Task UserLeft(DiscordClient sender, GuildMemberRemoveEventArgs e) internal async Task UserLeft(DiscordClient sender, GuildMemberRemoveEventArgs e)
@ -83,7 +83,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (e.Member.Roles.Any()) if (e.Member.Roles.Any())
_ = embed.AddField(new DiscordEmbedField(this.tKey.Roles.Get(this.Bot.Guilds[e.Guild.Id]).Build(), $"{string.Join(", ", e.Member.Roles.Select(x => x.Mention))}".TruncateWithIndication(1000))); _ = embed.AddField(new DiscordEmbedField(this.tKey.Roles.Get(this.Bot.Guilds[e.Guild.Id]).Build(), $"{string.Join(", ", e.Member.Roles.Select(x => x.Mention))}".TruncateWithIndication(1000)));
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
for (var i = 0; i < 3; i++) for (var i = 0; i < 3; i++)
{ {
@ -106,7 +106,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer = new(); embed.Footer = new();
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.KickedBy.Get(this.Bot.Guilds[e.Guild.Id])}' & '{this.tKey.Reason.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.KickedBy.Get(this.Bot.Guilds[e.Guild.Id])}' & '{this.tKey.Reason.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -160,7 +160,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (embed.Fields.Count == 0) if (embed.Fields.Count == 0)
return; return;
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
} }
internal async Task VoiceStateUpdated(DiscordClient sender, VoiceStateUpdateEventArgs e) internal async Task VoiceStateUpdated(DiscordClient sender, VoiceStateUpdateEventArgs e)
@ -174,7 +174,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (PreviousChannel != NewChannel) if (PreviousChannel != NewChannel)
if (PreviousChannel is null && NewChannel is not null) if (PreviousChannel is null && NewChannel is not null)
{ {
_ = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(this.tKey.UserJoinedVoiceChannel.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.VoiceStateUserJoined) .WithAuthor(this.tKey.UserJoinedVoiceChannel.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.VoiceStateUserJoined)
.WithThumbnail(e.User.AvatarUrl) .WithThumbnail(e.User.AvatarUrl)
.WithColor(EmbedColors.Success) .WithColor(EmbedColors.Success)
@ -185,7 +185,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
} }
else if (PreviousChannel is not null && NewChannel is null) else if (PreviousChannel is not null && NewChannel is null)
{ {
_ = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(this.tKey.UserLeftVoiceChannel.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.VoiceStateUserLeft) .WithAuthor(this.tKey.UserLeftVoiceChannel.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.VoiceStateUserLeft)
.WithThumbnail(e.User.AvatarUrl) .WithThumbnail(e.User.AvatarUrl)
.WithColor(EmbedColors.Error) .WithColor(EmbedColors.Error)
@ -196,7 +196,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
} }
else if (PreviousChannel is not null && NewChannel is not null) else if (PreviousChannel is not null && NewChannel is not null)
{ {
_ = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(this.tKey.UserSwitchedVoiceChannel.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.VoiceStateUserUpdated) .WithAuthor(this.tKey.UserSwitchedVoiceChannel.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.VoiceStateUserUpdated)
.WithThumbnail(e.User.AvatarUrl) .WithThumbnail(e.User.AvatarUrl)
.WithColor(EmbedColors.Warning) .WithColor(EmbedColors.Warning)
@ -264,7 +264,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
using (var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(Messages))) using (var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(Messages)))
{ {
_ = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed).WithFile(FileName, fileStream) _ = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed).WithFile(FileName, fileStream)
.AddComponents(new DiscordLinkButtonComponent($"{this.Bot.status.LoadedConfig.WebServer.UrlPrefix}/{e.Guild.Id}/DeletedMessages/{FileName}", "Open in Browser", .AddComponents(new DiscordLinkButtonComponent($"{this.Bot.status.LoadedConfig.WebServer.UrlPrefix}/{e.Guild.Id}/DeletedMessages/{FileName}", "Open in Browser",
this.Bot.status.LoadedConfig.WebServer.UrlPrefix.IsNullOrWhiteSpace()))); this.Bot.status.LoadedConfig.WebServer.UrlPrefix.IsNullOrWhiteSpace())));
} }
@ -311,7 +311,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
return; return;
} }
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
} }
internal async Task MemberUpdated(DiscordClient sender, GuildMemberUpdateEventArgs e) internal async Task MemberUpdated(DiscordClient sender, GuildMemberUpdateEventArgs e)
@ -339,7 +339,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
else else
_ = embed.AddField(new DiscordEmbedField(this.tKey.NewNickname.Get(this.Bot.Guilds[e.Guild.Id]), $"`{e.NicknameAfter}`")); _ = embed.AddField(new DiscordEmbedField(this.tKey.NewNickname.Get(this.Bot.Guilds[e.Guild.Id]), $"`{e.NicknameAfter}`"));
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
} }
var RolesUpdated = false; var RolesUpdated = false;
@ -427,7 +427,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Description += $"\n\n{Roles}"; embed.Description += $"\n\n{Roles}";
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
} }
if (e.TimeoutBefore != e.TimeoutAfter) if (e.TimeoutBefore != e.TimeoutAfter)
@ -436,7 +436,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
var timeBefore = (e.TimeoutBefore ?? DateTime.Today.AddDays(-300)).ToUniversalTime(); var timeBefore = (e.TimeoutBefore ?? DateTime.Today.AddDays(-300)).ToUniversalTime();
if (timeAfter > timeBefore) if (timeAfter > timeBefore)
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(this.tKey.TimedOut.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.UserBanned) .WithAuthor(this.tKey.TimedOut.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.UserBanned)
.WithColor(EmbedColors.Error) .WithColor(EmbedColors.Error)
.WithFooter($"{this.tKey.UserId.Get(this.Bot.Guilds[e.Guild.Id])}: {e.Member.Id}") .WithFooter($"{this.tKey.UserId.Get(this.Bot.Guilds[e.Guild.Id])}: {e.Member.Id}")
@ -446,7 +446,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
$"**{this.tKey.TimedOutUntil.Get(this.Bot.Guilds[e.Guild.Id])}**: {timeAfter.Timestamp(TimestampFormat.LongDateTime)} ({timeAfter.Timestamp()})"))); $"**{this.tKey.TimedOutUntil.Get(this.Bot.Guilds[e.Guild.Id])}**: {timeAfter.Timestamp(TimestampFormat.LongDateTime)} ({timeAfter.Timestamp()})")));
if (timeAfter < timeBefore) if (timeAfter < timeBefore)
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(this.tKey.TimeoutRemoved.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.UserBanRemoved) .WithAuthor(this.tKey.TimeoutRemoved.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.UserBanRemoved)
.WithColor(EmbedColors.Success) .WithColor(EmbedColors.Success)
.WithFooter($"{this.tKey.UserId.Get(this.Bot.Guilds[e.Guild.Id])}: {e.Member.Id}") .WithFooter($"{this.tKey.UserId.Get(this.Bot.Guilds[e.Guild.Id])}: {e.Member.Id}")
@ -460,7 +460,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
try try
{ {
if ((e.PendingBefore is null && e.PendingAfter is true) || (e.PendingAfter is true && e.PendingBefore is false)) if ((e.PendingBefore is null && e.PendingAfter is true) || (e.PendingAfter is true && e.PendingBefore is false))
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(this.tKey.MembershipApproved.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.UserAdded) .WithAuthor(this.tKey.MembershipApproved.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.UserAdded)
.WithColor(EmbedColors.Success) .WithColor(EmbedColors.Success)
.WithFooter($"{this.tKey.UserId.Get(this.Bot.Guilds[e.Guild.Id])}: {e.Member.Id}") .WithFooter($"{this.tKey.UserId.Get(this.Bot.Guilds[e.Guild.Id])}: {e.Member.Id}")
@ -478,7 +478,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
//{ //{
// // Normal avatar updates don't seem to fire the member updated event, will keep this code for potential future updates. // // Normal avatar updates don't seem to fire the member updated event, will keep this code for potential future updates.
// _ = SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() // _ = SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
// { // {
// Author = new DiscordEmbedBuilder.EmbedAuthor { IconUrl = AuditLogIcons.UserUpdated, Name = $"Member Profile Picture updated" }, // Author = new DiscordEmbedBuilder.EmbedAuthor { IconUrl = AuditLogIcons.UserUpdated, Name = $"Member Profile Picture updated" },
// Color = EmbedColors.Warning, // Color = EmbedColors.Warning,
@ -492,7 +492,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (e.GuildAvatarHashBefore != e.GuildAvatarHashAfter) if (e.GuildAvatarHashBefore != e.GuildAvatarHashAfter)
{ {
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(this.tKey.GuildProfilePictureUpdated.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.UserUpdated) .WithAuthor(this.tKey.GuildProfilePictureUpdated.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.UserUpdated)
.WithColor(EmbedColors.Warning) .WithColor(EmbedColors.Warning)
.WithFooter($"{this.tKey.UserId.Get(this.Bot.Guilds[e.Guild.Id])}: {e.Member.Id}") .WithFooter($"{this.tKey.UserId.Get(this.Bot.Guilds[e.Guild.Id])}: {e.Member.Id}")
@ -513,12 +513,12 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (e.Role.IsManaged) if (e.Role.IsManaged)
{ {
if (e.Role.Tags?.PremiumSubscriber ?? false) if (e.Role.Type is RoleType.Booster)
Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: `{this.tKey.ServerBooster.Get(this.Bot.Guilds[e.Guild.Id])}`\n\n"; Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: `{this.tKey.ServerBooster.Get(this.Bot.Guilds[e.Guild.Id])}`\n\n";
if (e.Role.Tags?.BotId is not null and not 0) if (e.Role.Type is RoleType.Bot)
{ {
var bot = await sender.GetUserAsync((ulong)e.Role.Tags.BotId); var bot = await sender.GetUserAsync(e.Role.Tags!.BotId.Value);
Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: {bot.Mention} `{bot.GetUsernameWithIdentifier()}`\n\n"; Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: {bot.Mention} `{bot.GetUsernameWithIdentifier()}`\n\n";
} }
@ -536,7 +536,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
$"{Integration}" + $"{Integration}" +
$"\n**{this.tKey.Permissions.Get(this.Bot.Guilds[e.Guild.Id])}**: {GeneratePermissions}"); $"\n**{this.tKey.Permissions.Get(this.Bot.Guilds[e.Guild.Id])}**: {GeneratePermissions}");
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -555,7 +555,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.CreatedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.CreatedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -573,12 +573,12 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (e.Role.IsManaged) if (e.Role.IsManaged)
{ {
if (e.Role.Tags?.PremiumSubscriber ?? false) if (e.Role.Type is RoleType.Booster)
Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: `{this.tKey.ServerBooster.Get(this.Bot.Guilds[e.Guild.Id])}`\n\n"; Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: `{this.tKey.ServerBooster.Get(this.Bot.Guilds[e.Guild.Id])}`\n\n";
if (e.Role.Tags.BotId is not null and not 0) if (e.Role.Type is RoleType.Bot)
{ {
var bot = await sender.GetUserAsync((ulong)e.Role.Tags.BotId); var bot = await sender.GetUserAsync(e.Role.Tags!.BotId.Value);
Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: {bot.Mention} `{bot.GetUsernameWithIdentifier()}`\n\n"; Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: {bot.Mention} `{bot.GetUsernameWithIdentifier()}`\n\n";
} }
@ -597,7 +597,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
$"{Integration}\n" + $"{Integration}\n" +
$"\n**{this.tKey.Permissions.Get(this.Bot.Guilds[e.Guild.Id])}**: {GeneratePermissions}"); $"\n**{this.tKey.Permissions.Get(this.Bot.Guilds[e.Guild.Id])}**: {GeneratePermissions}");
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -616,7 +616,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.DeletedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.DeletedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -671,12 +671,12 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (e.RoleAfter.IsManaged) if (e.RoleAfter.IsManaged)
{ {
if (e.RoleAfter.Tags?.PremiumSubscriber ?? false) if (e.RoleAfter.Type is RoleType.Booster)
Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: `{this.tKey.ServerBooster.Get(this.Bot.Guilds[e.Guild.Id])}`\n\n"; Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: `{this.tKey.ServerBooster.Get(this.Bot.Guilds[e.Guild.Id])}`\n\n";
if (e.RoleAfter.Tags?.BotId is not null and not 0) if (e.RoleAfter.Type is RoleType.Bot)
{ {
var bot = await sender.GetUserAsync((ulong)e.RoleAfter.Tags.BotId); var bot = await sender.GetUserAsync(e.RoleAfter.Tags!.BotId.Value);
Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: {bot.Mention} `{bot.GetUsernameWithIdentifier()}`\n\n"; Integration = $"**{this.tKey.Integration.Get(this.Bot.Guilds[e.Guild.Id])}**: {bot.Mention} `{bot.GetUsernameWithIdentifier()}`\n\n";
} }
@ -702,7 +702,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
$"{Integration}" + $"{Integration}" +
$"{PermissionDifference}"); $"{PermissionDifference}");
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -721,7 +721,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.ModifiedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.ModifiedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -751,7 +751,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
.TruncateWithIndication(1000))); .TruncateWithIndication(1000)));
} }
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -772,7 +772,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.BannedBy.Get(this.Bot.Guilds[e.Guild.Id])}' & '{this.tKey.Reason.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.BannedBy.Get(this.Bot.Guilds[e.Guild.Id])}' & '{this.tKey.Reason.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -793,7 +793,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
.WithThumbnail(e.Member.AvatarUrl) .WithThumbnail(e.Member.AvatarUrl)
.WithDescription($"**{this.tKey.User.Get(this.Bot.Guilds[e.Guild.Id])}**: {e.Member.Mention} `{e.Member.GetUsernameWithIdentifier()}`"); .WithDescription($"**{this.tKey.User.Get(this.Bot.Guilds[e.Guild.Id])}**: {e.Member.Mention} `{e.Member.GetUsernameWithIdentifier()}`");
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -811,7 +811,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.UnbannedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.UnbannedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -927,7 +927,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (e.GuildBefore.IconHash != e.GuildAfter.IconHash) if (e.GuildBefore.IconHash != e.GuildAfter.IconHash)
embed.ImageUrl = e.GuildAfter.IconUrl; embed.ImageUrl = e.GuildAfter.IconUrl;
var msg = await this.SendActionlog(e.GuildAfter, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.GuildAfter, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.GuildAfter.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.GuildAfter.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -946,7 +946,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer = new(); embed.Footer = new();
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.GuildAfter.Id]).Build(new TVar("Fields", $"'{this.tKey.ModifiedBy.Get(this.Bot.Guilds[e.GuildAfter.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.GuildAfter.Id]).Build(new TVar("Fields", $"'{this.tKey.ModifiedBy.Get(this.Bot.Guilds[e.GuildAfter.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -966,7 +966,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
.WithTimestamp(DateTime.UtcNow) .WithTimestamp(DateTime.UtcNow)
.WithDescription($"**{this.tKey.Name.Get(this.Bot.Guilds[e.Guild.Id])}**: {e.Channel.Mention} `[{e.Channel.GetIcon()}{e.Channel.Name}]`"); .WithDescription($"**{this.tKey.Name.Get(this.Bot.Guilds[e.Guild.Id])}**: {e.Channel.Mention} `[{e.Channel.GetIcon()}{e.Channel.Name}]`");
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -985,7 +985,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.CreatedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.CreatedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -1005,7 +1005,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
.WithTimestamp(DateTime.UtcNow) .WithTimestamp(DateTime.UtcNow)
.WithDescription($"**{this.tKey.Name.Get(this.Bot.Guilds[e.Guild.Id])}**: `[{e.Channel.GetIcon()}{e.Channel.Name}]`"); .WithDescription($"**{this.tKey.Name.Get(this.Bot.Guilds[e.Guild.Id])}**: `[{e.Channel.GetIcon()}{e.Channel.Name}]`");
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -1024,7 +1024,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.DeletedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.DeletedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -1055,7 +1055,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
.WithTimestamp(DateTime.UtcNow) .WithTimestamp(DateTime.UtcNow)
.WithDescription(Description); .WithDescription(Description);
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
return; return;
@ -1074,7 +1074,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.ModifiedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.ModifiedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }
@ -1087,7 +1087,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
if (!await this.ValidateServer(e.Guild) || !this.Bot.Guilds[e.Guild.Id].ActionLog.InvitesModified) if (!await this.ValidateServer(e.Guild) || !this.Bot.Guilds[e.Guild.Id].ActionLog.InvitesModified)
return; return;
_ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder() _ = this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(this.tKey.InviteCreated.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.InviteAdded) .WithAuthor(this.tKey.InviteCreated.Get(this.Bot.Guilds[e.Guild.Id]), null, AuditLogIcons.InviteAdded)
.WithColor(EmbedColors.Success) .WithColor(EmbedColors.Success)
.WithTimestamp(DateTime.UtcNow) .WithTimestamp(DateTime.UtcNow)
@ -1109,7 +1109,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
$"**{this.tKey.CreatedBy.Get(this.Bot.Guilds[e.Guild.Id])}**: {e.Invite.Inviter?.Mention ?? this.tKey.NoInviter.Get(this.Bot.Guilds[e.Guild.Id]).Build(true)} `{e.Invite.Inviter?.GetUsernameWithIdentifier() ?? "-"}`\n" + $"**{this.tKey.CreatedBy.Get(this.Bot.Guilds[e.Guild.Id])}**: {e.Invite.Inviter?.Mention ?? this.tKey.NoInviter.Get(this.Bot.Guilds[e.Guild.Id]).Build(true)} `{e.Invite.Inviter?.GetUsernameWithIdentifier() ?? "-"}`\n" +
$"**{this.tKey.Channel.Get(this.Bot.Guilds[e.Guild.Id])}**: {e.Channel.Mention} `[{e.Channel.GetIcon()}{e.Channel.Name}]`"); $"**{this.tKey.Channel.Get(this.Bot.Guilds[e.Guild.Id])}**: {e.Channel.Mention} `[{e.Channel.GetIcon()}{e.Channel.Name}]`");
var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().WithEmbed(embed)); var msg = await this.SendActionlog(e.Guild, new DiscordMessageBuilder().AddEmbed(embed));
if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails) if (!this.Bot.Guilds[e.Guild.Id].ActionLog.AttemptGettingMoreDetails)
@ -1130,7 +1130,7 @@ internal sealed class ActionlogEvents(Bot bot) : RequiresTranslation(bot)
embed.Footer = new(); embed.Footer = new();
embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.DeletedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})"; embed.Footer.Text += $"\n({this.tKey.FooterAuditLogDisclaimer.Get(this.Bot.Guilds[e.Guild.Id]).Build(new TVar("Fields", $"'{this.tKey.DeletedBy.Get(this.Bot.Guilds[e.Guild.Id])}'"))})";
_ = msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
break; break;
} }

View file

@ -1,4 +1,4 @@
// Project Makoto // Project Makoto
// Copyright (C) 2024 Fortunevale // Copyright (C) 2024 Fortunevale
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -55,7 +55,7 @@ internal sealed class EmbedMessagesEvents(Bot bot) : RequiresTranslation(bot)
var JumpToMessage = new DiscordLinkButtonComponent(message.JumpLink.ToString(), this.t.Common.JumpToMessage.Get(this.Bot.Guilds[e.Guild.Id]), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬"))); var JumpToMessage = new DiscordLinkButtonComponent(message.JumpLink.ToString(), this.t.Common.JumpToMessage.Get(this.Bot.Guilds[e.Guild.Id]), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("💬")));
var msg = await e.Message.RespondAsync(new DiscordMessageBuilder().WithEmbed(new DiscordEmbedBuilder var msg = await e.Message.RespondAsync(new DiscordMessageBuilder().AddEmbed(new DiscordEmbedBuilder
{ {
Author = new DiscordEmbedBuilder.EmbedAuthor { IconUrl = message.Author.AvatarUrl, Name = $"{message.Author.GetUsernameWithIdentifier()}" }, Author = new DiscordEmbedBuilder.EmbedAuthor { IconUrl = message.Author.AvatarUrl, Name = $"{message.Author.GetUsernameWithIdentifier()}" },
Color = message.Author.BannerColor ?? EmbedColors.Info, Color = message.Author.BannerColor ?? EmbedColors.Info,
@ -63,7 +63,7 @@ internal sealed class EmbedMessagesEvents(Bot bot) : RequiresTranslation(bot)
ImageUrl = (message.Attachments?.Count > 0 && (message.Attachments[0].Filename.EndsWith(".png") ImageUrl = (message.Attachments?.Count > 0 && (message.Attachments[0].Filename.EndsWith(".png")
|| message.Attachments[0].Filename.EndsWith(".jpeg") || message.Attachments[0].Filename.EndsWith(".jpeg")
|| message.Attachments[0].Filename.EndsWith(".jpg") || message.Attachments[0].Filename.EndsWith(".jpg")
|| message.Attachments[0].Filename.EndsWith(".gif")) ? message.Attachments[0].Url : ""), || message.Attachments[0].Filename.EndsWith(".gif")) ? message.Attachments[0].Url.ToString() : ""),
Timestamp = message.Timestamp, Timestamp = message.Timestamp,
}).AddComponents(JumpToMessage, Delete)); }).AddComponents(JumpToMessage, Delete));
} }

View file

@ -54,6 +54,7 @@ internal sealed class JoinEvents(Bot bot) : RequiresTranslation(bot)
} }
} }
await RunUserCountUpdater(this.Bot, e.Guild);
await this.Bot.Guilds[e.Guild.Id].Members[e.Member.Id].PerformAutoKickChecks(e.Guild, e.Member); await this.Bot.Guilds[e.Guild.Id].Members[e.Member.Id].PerformAutoKickChecks(e.Guild, e.Member);
} }
@ -81,5 +82,39 @@ internal sealed class JoinEvents(Bot bot) : RequiresTranslation(bot)
}); });
} }
} }
await RunUserCountUpdater(this.Bot, e.Guild);
}
internal static async Task RunUserCountUpdater(Bot bot, DiscordGuild Guild)
{
if (bot.Guilds[Guild.Id].Join.UserCountChannelId != 0)
{
if (Guild.Channels.ContainsKey(bot.Guilds[Guild.Id].Join.UserCountChannelId))
{
foreach (var b in ScheduledTaskExtensions.GetScheduledTasks())
{
if (b.CustomData is not ScheduledTaskIdentifier scheduledTaskIdentifier)
continue;
if (scheduledTaskIdentifier.Snowflake == Guild.Id && scheduledTaskIdentifier.Type == "usercount")
b.Delete();
}
_ = new Func<Task>(async () =>
{
_ = Guild.GetChannel(bot.Guilds[Guild.Id].Join.UserCountChannelId).ModifyAsync(x =>
{
x.Name = (bot.Guilds[Guild.Id].Join.UserCountChannelFormat is null ? "Count: %s" : bot.Guilds[Guild.Id].Join.UserCountChannelFormat)
.Replace("%s", Guild.MemberCount);
})
.ContinueWith(x =>
{
bot.Guilds[Guild.Id].Join.UserCountChannelLastEdit = DateTime.UtcNow;
});
}).CreateScheduledTask(bot.Guilds[Guild.Id].Join.UserCountChannelLastEdit.AddMinutes(5),
new ScheduledTaskIdentifier(Guild.Id, "", "usercount"));
}
}
} }
} }

View file

@ -81,7 +81,7 @@ internal sealed class PhishingProtectionEvents(Bot bot) : RequiresTranslation(bo
_ = embed.AddFields(report_fields.Take(2)); _ = embed.AddFields(report_fields.Take(2));
_ = e.RespondAsync(new DiscordMessageBuilder().WithEmbed(embed).AddComponents(new DiscordLinkButtonComponent($"https://www.abuseipdb.com/check/{parsedIp[0]}", this.tKey.OpenInBrowser.Get(this.Bot.Guilds[guild.Id])))); _ = e.RespondAsync(new DiscordMessageBuilder().AddEmbed(embed).AddComponents(new DiscordLinkButtonComponent($"https://www.abuseipdb.com/check/{parsedIp[0]}", this.tKey.OpenInBrowser.Get(this.Bot.Guilds[guild.Id]))));
} }
} }

View file

@ -87,7 +87,7 @@ internal sealed class TokenLeakEvents(Bot bot) : RequiresTranslation(bot)
var s = (InvalidateCount > 1 ? "s" : ""); var s = (InvalidateCount > 1 ? "s" : "");
_ = e.Channel.SendMessageAsync(new DiscordMessageBuilder().WithEmbed( _ = e.Channel.SendMessageAsync(new DiscordMessageBuilder().AddEmbed(
new DiscordEmbedBuilder() new DiscordEmbedBuilder()
.WithColor(EmbedColors.Error) .WithColor(EmbedColors.Error)
.WithAuthor(sender.CurrentUser.GetUsername(), null, sender.CurrentUser.AvatarUrl) .WithAuthor(sender.CurrentUser.GetUsername(), null, sender.CurrentUser.AvatarUrl)

View file

@ -49,7 +49,7 @@ internal sealed class VcCreatorEvents(Bot bot) : RequiresTranslation(bot)
_ = await newChannel.SendMessageAsync(new DiscordMessageBuilder() _ = await newChannel.SendMessageAsync(new DiscordMessageBuilder()
.WithContent(e.User.Mention) .WithContent(e.User.Mention)
.WithEmbed(new DiscordEmbedBuilder() .AddEmbed(new DiscordEmbedBuilder()
.WithAuthor(e.Guild.Name, "", e.Guild.IconUrl) .WithAuthor(e.Guild.Name, "", e.Guild.IconUrl)
.WithColor(EmbedColors.Info) .WithColor(EmbedColors.Info)
.WithTimestamp(DateTime.UtcNow) .WithTimestamp(DateTime.UtcNow)

View file

@ -41,26 +41,26 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="DisCatSharp.Extensions.TwoFactorCommands" Version="3.1.0" /> <PackageReference Include="DisCatSharp.Extensions.TwoFactorCommands" Version="3.1.0" />
<PackageReference Include="FFMpegCore" Version="5.1.0" /> <PackageReference Include="FFMpegCore" Version="5.2.0" />
<PackageReference Include="GenHTTP.Core" Version="9.6.0" /> <PackageReference Include="GenHTTP.Core" Version="9.7.0" />
<PackageReference Include="GenHTTP.Modules.StaticWebsites" Version="9.6.0" /> <PackageReference Include="GenHTTP.Modules.StaticWebsites" Version="9.7.0" />
<PackageReference Include="HtmlSanitizer" Version="8.1.870" /> <PackageReference Include="HtmlSanitizer" Version="9.0.886" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.12.0" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting" Version="4.12.0" /> <PackageReference Include="Microsoft.CodeAnalysis.Scripting" Version="4.14.0" />
<PackageReference Include="MySqlConnector" Version="2.4.0" /> <PackageReference Include="MySqlConnector" Version="2.4.0" />
<PackageReference Include="Octokit" Version="14.0.0" /> <PackageReference Include="Octokit" Version="14.0.0" />
<PackageReference Include="Serilog" Version="4.2.0" /> <PackageReference Include="Serilog" Version="4.2.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.0" /> <PackageReference Include="Serilog.Extensions.Logging" Version="9.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" /> <PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.0" /> <PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
<PackageReference Include="System.Data.SQLite" Version="1.0.119" /> <PackageReference Include="System.Data.SQLite" Version="1.0.119" />
<PackageReference Include="DisCatSharp.Analyzer.Roselyn" Version="6.2.5"> <PackageReference Include="DisCatSharp.Analyzer.Roselyn" Version="6.2.5">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="System.Drawing.Common" Version="9.0.1" /> <PackageReference Include="System.Drawing.Common" Version="9.0.9" />
<PackageReference Include="System.Text.Json" Version="9.0.1" /> <PackageReference Include="System.Text.Json" Version="9.0.9" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View file

@ -59,28 +59,28 @@ Global
x64|x64 = x64|x64 x64|x64 = x64|x64
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Debug|Any CPU.ActiveCfg = Debug|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Debug|Any CPU.Build.0 = Debug|Any CPU {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Debug|Any CPU.Build.0 = Debug|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Debug|x64.ActiveCfg = Debug|x64 {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Debug|x64.ActiveCfg = Debug|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Debug|x64.Build.0 = Debug|x64 {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Debug|x64.Build.0 = Debug|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Release|Any CPU.ActiveCfg = Release|Any CPU {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Release|Any CPU.ActiveCfg = Release|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Release|Any CPU.Build.0 = Release|Any CPU {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Release|Any CPU.Build.0 = Release|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Release|x64.ActiveCfg = Release|x64 {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Release|x64.ActiveCfg = Release|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Release|x64.Build.0 = Release|x64 {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.Release|x64.Build.0 = Release|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.x64|Any CPU.ActiveCfg = x64|Any CPU {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.x64|Any CPU.ActiveCfg = x64|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.x64|Any CPU.Build.0 = x64|Any CPU {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.x64|Any CPU.Build.0 = x64|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.x64|x64.ActiveCfg = x64|x64 {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.x64|x64.ActiveCfg = x64|x64
{A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.x64|x64.Build.0 = x64|x64 {A47FCB9F-FEA3-4810-9C77-4CC47DB5BD19}.x64|x64.Build.0 = x64|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {906F9C70-17B3-4B6D-AFFF-976338D641C4}.Debug|Any CPU.ActiveCfg = Debug|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.Debug|Any CPU.Build.0 = Debug|Any CPU {906F9C70-17B3-4B6D-AFFF-976338D641C4}.Debug|Any CPU.Build.0 = Debug|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.Debug|x64.ActiveCfg = Debug|x64 {906F9C70-17B3-4B6D-AFFF-976338D641C4}.Debug|x64.ActiveCfg = Debug|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.Debug|x64.Build.0 = Debug|x64 {906F9C70-17B3-4B6D-AFFF-976338D641C4}.Debug|x64.Build.0 = Debug|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.Release|Any CPU.ActiveCfg = Release|Any CPU {906F9C70-17B3-4B6D-AFFF-976338D641C4}.Release|Any CPU.ActiveCfg = Release|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.Release|Any CPU.Build.0 = Release|Any CPU {906F9C70-17B3-4B6D-AFFF-976338D641C4}.Release|Any CPU.Build.0 = Release|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.Release|x64.ActiveCfg = Release|x64 {906F9C70-17B3-4B6D-AFFF-976338D641C4}.Release|x64.ActiveCfg = Release|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.Release|x64.Build.0 = Release|x64 {906F9C70-17B3-4B6D-AFFF-976338D641C4}.Release|x64.Build.0 = Release|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.x64|Any CPU.ActiveCfg = x64|Any CPU {906F9C70-17B3-4B6D-AFFF-976338D641C4}.x64|Any CPU.ActiveCfg = x64|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.x64|Any CPU.Build.0 = x64|Any CPU {906F9C70-17B3-4B6D-AFFF-976338D641C4}.x64|Any CPU.Build.0 = x64|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.x64|x64.ActiveCfg = x64|x64 {906F9C70-17B3-4B6D-AFFF-976338D641C4}.x64|x64.ActiveCfg = x64|x64
{906F9C70-17B3-4B6D-AFFF-976338D641C4}.x64|x64.Build.0 = x64|x64 {906F9C70-17B3-4B6D-AFFF-976338D641C4}.x64|x64.Build.0 = x64|x64
{8BD34631-4327-4533-8587-93E38D7A5DD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8BD34631-4327-4533-8587-93E38D7A5DD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@ -215,18 +215,6 @@ Global
{40158660-CD40-44A8-8834-077C132B7DDD}.x64|Any CPU.Build.0 = Debug|Any CPU {40158660-CD40-44A8-8834-077C132B7DDD}.x64|Any CPU.Build.0 = Debug|Any CPU
{40158660-CD40-44A8-8834-077C132B7DDD}.x64|x64.ActiveCfg = Debug|Any CPU {40158660-CD40-44A8-8834-077C132B7DDD}.x64|x64.ActiveCfg = Debug|Any CPU
{40158660-CD40-44A8-8834-077C132B7DDD}.x64|x64.Build.0 = Debug|Any CPU {40158660-CD40-44A8-8834-077C132B7DDD}.x64|x64.Build.0 = Debug|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.Debug|x64.ActiveCfg = Debug|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.Debug|x64.Build.0 = Debug|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.Release|Any CPU.Build.0 = Release|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.Release|x64.ActiveCfg = Release|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.Release|x64.Build.0 = Release|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.x64|Any CPU.ActiveCfg = Debug|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.x64|Any CPU.Build.0 = Debug|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.x64|x64.ActiveCfg = Debug|Any CPU
{7F04788A-8B14-4C62-A247-3B1F93C01B03}.x64|x64.Build.0 = Debug|Any CPU
{0AB29534-3D3E-4482-A98A-8F1C01C4B476}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0AB29534-3D3E-4482-A98A-8F1C01C4B476}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0AB29534-3D3E-4482-A98A-8F1C01C4B476}.Debug|Any CPU.Build.0 = Debug|Any CPU {0AB29534-3D3E-4482-A98A-8F1C01C4B476}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0AB29534-3D3E-4482-A98A-8F1C01C4B476}.Debug|x64.ActiveCfg = Debug|Any CPU {0AB29534-3D3E-4482-A98A-8F1C01C4B476}.Debug|x64.ActiveCfg = Debug|Any CPU

View file

@ -3780,6 +3780,14 @@
"en": "Joinlog Channel", "en": "Joinlog Channel",
"de": "Beitrittsprotokoll-Kanal" "de": "Beitrittsprotokoll-Kanal"
}, },
"UserCountChannel": {
"en": "User Count Channel",
"de": "Benutzeranzahl-Kanal"
},
"UserCountChannelFormat": {
"en": "User Count Format",
"de": "Benutzeranzahl-Format"
},
"Role": { "Role": {
"en": "Role On Join", "en": "Role On Join",
"de": "Rolle beim Beitritt" "de": "Rolle beim Beitritt"
@ -3808,6 +3816,18 @@
"en": "Change Joinlog Channel", "en": "Change Joinlog Channel",
"de": "Beitrittsprotokoll-Kanal ändern" "de": "Beitrittsprotokoll-Kanal ändern"
}, },
"ChangeUserCountChannel": {
"en": "Change User Count Channel",
"de": "Benutzeranzahl-Kanal ändern"
},
"ChangeUserCountChannelFormat": {
"en": "Change User Count Format",
"de": "Benutzeranzahl-Format ändern"
},
"ChangeUserCountChannelFormatModal": {
"en": "User Count Format | %s as placeholder",
"de": "Benutzeranzahl-Format | %s für Platzhalter"
},
"ChangeRoleButton": { "ChangeRoleButton": {
"en": "Change Role assigned on join", "en": "Change Role assigned on join",
"de": "Beim Beitritt zugewiesene Rolle ändern" "de": "Beim Beitritt zugewiesene Rolle ändern"
@ -3828,6 +3848,10 @@
"en": "Disable Joinlog", "en": "Disable Joinlog",
"de": "Beitrittsprotokoll deaktivieren" "de": "Beitrittsprotokoll deaktivieren"
}, },
"DisableUserCountChannel": {
"en": "Disable User Count Channel",
"de": "Benutzeranzahl-Kanal deaktivieren"
},
"AutoAssignRoleName": { "AutoAssignRoleName": {
"en": "Automatically Assigned Role", "en": "Automatically Assigned Role",
"de": "Automatisch zugewiesene Rolle" "de": "Automatisch zugewiesene Rolle"

View file

@ -173,7 +173,7 @@ internal sealed class ExperienceHandler : RequiresTranslation
this.Bot.Users[user.Id].ExperienceUser.DirectMessageOptOut = true; this.Bot.Users[user.Id].ExperienceUser.DirectMessageOptOut = true;
_ = await msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = await msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
_ = await (await user.CreateDmChannelAsync()).SendMessageAsync(this.tKey.AutomaticDeletion.Get(this.Bot.Users[user.Id]).Build( _ = await (await user.CreateDmChannelAsync()).SendMessageAsync(this.tKey.AutomaticDeletion.Get(this.Bot.Users[user.Id]).Build(
new TVar("Command", "`/levelrewards-optin`"), new TVar("Command", "`/levelrewards-optin`"),
@ -187,7 +187,7 @@ internal sealed class ExperienceHandler : RequiresTranslation
{ new DiscordButtonComponent(ButtonStyle.Secondary, "opt-out-experience-dm", this.tKey.DisableDirectMessages.Get(this.Bot.Users[user.Id]), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("⛔"))) }, { new DiscordButtonComponent(ButtonStyle.Secondary, "opt-out-experience-dm", this.tKey.DisableDirectMessages.Get(this.Bot.Users[user.Id]), false, new DiscordComponentEmoji(DiscordEmoji.FromUnicode("⛔"))) },
}; };
msg = await (await user.CreateDmChannelAsync()).SendMessageAsync(new DiscordMessageBuilder().WithEmbed(embed).AddComponents(discordComponents)); msg = await (await user.CreateDmChannelAsync()).SendMessageAsync(new DiscordMessageBuilder().AddEmbed(embed).AddComponents(discordComponents));
this.Bot.DiscordClient.ComponentInteractionCreated += RunInteraction; this.Bot.DiscordClient.ComponentInteractionCreated += RunInteraction;
@ -195,7 +195,7 @@ internal sealed class ExperienceHandler : RequiresTranslation
{ {
await Task.Delay(3600000); await Task.Delay(3600000);
embed.Footer.Text += $" • {this.t.Commands.Common.InteractionTimeout.Get(this.Bot.Users[user.Id])}"; embed.Footer.Text += $" • {this.t.Commands.Common.InteractionTimeout.Get(this.Bot.Users[user.Id])}";
_ = await msg.ModifyAsync(new DiscordMessageBuilder().WithEmbed(embed)); _ = await msg.ModifyAsync(new DiscordMessageBuilder().AddEmbed(embed));
this.Bot.DiscordClient.ComponentInteractionCreated -= RunInteraction; this.Bot.DiscordClient.ComponentInteractionCreated -= RunInteraction;
} }

View file

@ -1,4 +1,4 @@
// Project Makoto // Project Makoto
// Copyright (C) 2024 Fortunevale // Copyright (C) 2024 Fortunevale
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -156,23 +156,23 @@ public static class DiscordExtensions
}))}" + }))}" +
$"{string.Join("", msg.Attachments?.Select(x => $"{string.Join("", msg.Attachments?.Select(x =>
{ {
var tempUrl = x.Url.TruncateAt(true, '?'); var tempUrl = x.Url.ToString().TruncateAt(true, '?');
var type = string.Empty; var type = string.Empty;
var alt = x.Description; var alt = x.Description;
if (x.Url.EndsWith(".jpg", StringComparison.InvariantCultureIgnoreCase) || if (x.Url.ToString().EndsWith(".jpg", StringComparison.InvariantCultureIgnoreCase) ||
x.Url.EndsWith(".jpeg", StringComparison.InvariantCultureIgnoreCase) || x.Url.ToString().EndsWith(".jpeg", StringComparison.InvariantCultureIgnoreCase) ||
x.Url.EndsWith(".png", StringComparison.InvariantCultureIgnoreCase) || x.Url.ToString().EndsWith(".png", StringComparison.InvariantCultureIgnoreCase) ||
x.Url.EndsWith(".webp", StringComparison.InvariantCultureIgnoreCase) || x.Url.ToString().EndsWith(".webp", StringComparison.InvariantCultureIgnoreCase) ||
x.Url.EndsWith(".gifv", StringComparison.InvariantCultureIgnoreCase) || x.Url.ToString().EndsWith(".gifv", StringComparison.InvariantCultureIgnoreCase) ||
x.Url.EndsWith(".gif", StringComparison.InvariantCultureIgnoreCase)) x.Url.ToString().EndsWith(".gif", StringComparison.InvariantCultureIgnoreCase))
type = "image"; type = "image";
else if (x.Url.EndsWith(".webm", StringComparison.InvariantCultureIgnoreCase) || else if (x.Url.ToString().EndsWith(".webm", StringComparison.InvariantCultureIgnoreCase) ||
x.Url.EndsWith(".mp4", StringComparison.InvariantCultureIgnoreCase)) x.Url.ToString().EndsWith(".mp4", StringComparison.InvariantCultureIgnoreCase))
type = "video"; type = "video";
else if (x.Url.EndsWith(".wav", StringComparison.InvariantCultureIgnoreCase) || else if (x.Url.ToString().EndsWith(".wav", StringComparison.InvariantCultureIgnoreCase) ||
x.Url.EndsWith(".ogg", StringComparison.InvariantCultureIgnoreCase) || x.Url.ToString().EndsWith(".ogg", StringComparison.InvariantCultureIgnoreCase) ||
x.Url.EndsWith(".mp3", StringComparison.InvariantCultureIgnoreCase)) x.Url.ToString().EndsWith(".mp3", StringComparison.InvariantCultureIgnoreCase))
type = "audio"; type = "audio";
else else
{ {
@ -182,7 +182,7 @@ public static class DiscordExtensions
return $"<discord-attachment slot=\"attachments\" " + return $"<discord-attachment slot=\"attachments\" " +
$"type=\"{type}\" " + $"type=\"{type}\" " +
$"url=\"{Sanitize(x.Url)}\" " + $"url=\"{Sanitize(x.Url.ToString())}\" " +
$"alt=\"{Sanitize(alt)}\" " + $"alt=\"{Sanitize(alt)}\" " +
$"size=\"{x.FileSize.Value.FileSizeToHumanReadable()}\" " + $"size=\"{x.FileSize.Value.FileSizeToHumanReadable()}\" " +
$"height=\"{x.Height}\" " + $"height=\"{x.Height}\" " +
@ -222,7 +222,7 @@ public static class DiscordExtensions
return $"<discord-attachment slot=\"attachments\" " + return $"<discord-attachment slot=\"attachments\" " +
$"type=\"{type}\" " + $"type=\"{type}\" " +
$"url=\"{Sanitize(x.Url)}\" " + $"url=\"{Sanitize(x.Url.ToString())}\" " +
$"alt=\"{Sanitize(alt)}\" " + $"alt=\"{Sanitize(alt)}\" " +
$"height=\"160\" " + $"height=\"160\" " +
$"width=\"160\"/>"; $"width=\"160\"/>";
@ -548,10 +548,10 @@ public static class DiscordExtensions
=> DigitsToEmotes(i.ToString()); => DigitsToEmotes(i.ToString());
public static string ToTimestamp(this DateTime dateTime, TimestampFormat format = TimestampFormat.RelativeTime) public static string ToTimestamp(this DateTime dateTime, TimestampFormat format = TimestampFormat.RelativeTime)
=> Formatter.Timestamp(dateTime, format); => dateTime.Timestamp(format);
public static string ToTimestamp(this DateTimeOffset dateTime, TimestampFormat format = TimestampFormat.RelativeTime) public static string ToTimestamp(this DateTimeOffset dateTime, TimestampFormat format = TimestampFormat.RelativeTime)
=> Formatter.Timestamp(dateTime, format); => dateTime.Timestamp(format);
public static string GetCommandMention(this DiscordClient client, Bot bot, string command) public static string GetCommandMention(this DiscordClient client, Bot bot, string command)
=> (bot.status.LoadedConfig.IsDev ? => (bot.status.LoadedConfig.IsDev ?

View file

@ -137,11 +137,11 @@ internal static class CommandCompiler
case MakotoCommandType.SlashCommand: case MakotoCommandType.SlashCommand:
if (command.IsGroup) if (command.IsGroup)
return $$""" return $$"""
[{{typeof(SlashCommandGroupAttribute).FullName}}("{{command.Name}}", "{{command.Description}}"{{(command.RequiredPermissions is null ? "" : $", {(long)command.RequiredPermissions}")}}, dmPermission: {{command.AllowPrivateUsage.ToString().ToLower()}}, isNsfw: {{command.IsNsfw.ToString().ToLower()}})] [{{typeof(SlashCommandGroupAttribute).FullName}}("{{command.Name}}", "{{command.Description}}"{{(command.RequiredPermissions is null ? "" : $", {(long)command.RequiredPermissions}")}}, {{(command.AllowPrivateUsage ? string.Empty : "allowedContexts: [InteractionContextType.Guild]")}}, isNsfw: {{command.IsNsfw.ToString().ToLower()}})]
"""; """;
else else
return $$""" return $$"""
[{{typeof(SlashCommandAttribute).FullName}}("{{command.Name}}", "{{command.Description}}"{{(command.RequiredPermissions is null ? "" : $", {(long)command.RequiredPermissions}")}}, dmPermission: {{command.AllowPrivateUsage.ToString().ToLower()}}, isNsfw: {{command.IsNsfw.ToString().ToLower()}})] [{{typeof(SlashCommandAttribute).FullName}}("{{command.Name}}", "{{command.Description}}"{{(command.RequiredPermissions is null ? "" : $", {(long)command.RequiredPermissions}")}}, {{(command.AllowPrivateUsage ? string.Empty : "allowedContexts: [InteractionContextType.Guild]")}}, isNsfw: {{command.IsNsfw.ToString().ToLower()}})]
"""; """;
case MakotoCommandType.PrefixCommand: case MakotoCommandType.PrefixCommand:
if (command.IsGroup) if (command.IsGroup)
@ -156,7 +156,7 @@ internal static class CommandCompiler
"""; """;
case MakotoCommandType.ContextMenu: case MakotoCommandType.ContextMenu:
return $$""" return $$"""
[{{typeof(ContextMenuAttribute).FullName}}({{typeof(ApplicationCommandType).FullName}}.{{Enum.GetName(typeof(ApplicationCommandType), command.ContextMenuType)}}, "{{command.Name}}", dmPermission: {{command.AllowPrivateUsage.ToString().ToLower()}}, isNsfw: {{command.IsNsfw.ToString().ToLower()}})] [{{typeof(ContextMenuAttribute).FullName}}({{typeof(ApplicationCommandType).FullName}}.{{Enum.GetName(typeof(ApplicationCommandType), command.ContextMenuType)}}, "{{command.Name}}", {{(command.AllowPrivateUsage ? string.Empty : "allowedContexts: [InteractionContextType.Guild]")}}, isNsfw: {{command.IsNsfw.ToString().ToLower()}})]
"""; """;
default: default:

View file

@ -260,7 +260,7 @@ internal static class DisCatSharpExtensionsLoader
DebugStartup = true DebugStartup = true
}); });
if (bot.status.CurrentAppHash != bot.status.LoadedConfig.DontModify.LastKnownHash) if (bot.status.CurrentAppHash != bot.status.LoadedConfig.DontModify.LastKnownHash && Directory.Exists("CompiledCommands"))
{ {
Log.Debug("Clearing cached Commands.."); Log.Debug("Clearing cached Commands..");
await FileExtensions.CleanupFilesAndDirectories(new(), Directory.GetFiles("CompiledCommands").ToList()); await FileExtensions.CleanupFilesAndDirectories(new(), Directory.GetFiles("CompiledCommands").ToList());

View file

@ -14,10 +14,13 @@ internal static class SyncTasks
{ {
internal static async Task GuildDownloadCompleted(Bot bot, DiscordClient sender, GuildDownloadCompletedEventArgs e) internal static async Task GuildDownloadCompleted(Bot bot, DiscordClient sender, GuildDownloadCompletedEventArgs e)
{ {
if (bot.status.DiscordGuildDownloadCompleted)
return;
bot.status.DiscordGuildDownloadCompleted = true;
_ = Task.Run(async () => _ = Task.Run(async () =>
{ {
bot.status.DiscordGuildDownloadCompleted = true;
Log.Information("I'm on {GuildsCount} guilds.", e.Guilds.Count); Log.Information("I'm on {GuildsCount} guilds.", e.Guilds.Count);
_ = Task.Run(async () => _ = Task.Run(async () =>
@ -121,8 +124,14 @@ internal static class SyncTasks
}).Add(bot); }).Add(bot);
} }
internal static DateTime lastSyncTaskTime = DateTime.MinValue;
internal static async Task ExecuteSyncTasks(Bot bot, DiscordShardedClient shardedClient) internal static async Task ExecuteSyncTasks(Bot bot, DiscordShardedClient shardedClient)
{ {
if (lastSyncTaskTime.GetTimespanSince() < TimeSpan.FromSeconds(30))
return;
lastSyncTaskTime = DateTime.UtcNow;
var Guilds = shardedClient.GetGuilds(); var Guilds = shardedClient.GetGuilds();
ObservableList<Task> runningTasks = new(); ObservableList<Task> runningTasks = new();

View file

@ -11,7 +11,12 @@
"excludePackagePatterns": [ "Extensions" ], "excludePackagePatterns": [ "Extensions" ],
"matchPackagePrefixes": [ "DisCatSharp" ], "matchPackagePrefixes": [ "DisCatSharp" ],
"groupName": "discatsharp", "groupName": "discatsharp",
"automerge": true "automerge": false,
"enabled": false
},
{
"managers": ["github-actions"],
"enabled": false
} }
], ],
"git-submodules": { "git-submodules": {