Fixes current deployment failure due to use of non-standard SSH port on
our production host.
`ssh-keyscan` command was moved out to its own step to help
troubleshooting in the future.
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This PR adds Dockerfile, to run Octobot within a Docker container, and
compose.yaml, to run the Octobot container along with any services that
the user may require.
---------
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Signed-off-by: mctaylors <cantsendmails@mctaylors.ru>
Co-authored-by: mctaylors <cantsendmails@mctaylors.ru>
this is supposed to be Dependabot's job, but ig something happened to it
Bumps `JetBrains.Annotations` from `2023.3.0` to `2024.2.0`
<details><summary>Changelog</summary>
• Added DefaultEqualityUsageAttribute for equality members usage
analysis.
• MustDisposeResourceAttribute is now allowed on struct types.
• Added ability to specify the description for UsedImplicitlyAttribute
(new 'Reason' property).
• Added copyright information to nuspec.
</details>
Bumps `Remora.Commands` from `10.0.5` to `10.0.6`
<details><summary>Changelog</summary>
Upgrade Remora.Sdk.
Upgrade nuget packages.
</details>
Bumps `Remora.Discord.Extensions` from `5.3.5` to `5.3.6`
Bumps `Remora.Discord.Interactivity` from `4.5.4` to `5.0.0`
<details><summary>Changelog</summary>
Update dependencies.
BREAKING: Rework deletion logic for data leases to prevent deadlocks.
</details>
The breaking change in Remora should not affect us.
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Changes in the list:
1. Fly Octo Fly ~ Ebb & Flow (Octo) / Off the Hook → Spectrum Obligato ~
Ebb & Flow (Out of Order) / Off the Hook feat. Dedf1sh
2. `#47` onward / Dedf1sh feat. Off the Hook
3. EchΘ Θnslaught / Free Association
4. Short Order / Off the Hook
5. Fins in the Air / Deep Cut
Signed-off-by: Macintxsh <95250141+mctaylors@users.noreply.github.com>
This PR fixes an issue where the `LogResultStackTrace` method would log
stack traces for results that encountered an error due to a cancelled
operation/task. The `LoggerExtensions` class already skipped
`TaskCanceledException`s, but didn't skip `OperationCanceledException`s
(which is a parent of `TaskCanceledException`).
The patch specifically does not affect *inner* results which are
canceled. Skipping logging these could hide the true cause of an error
which appears important
This PR makes sure that a cancellation token is never *required* to use
an `async` method. This does not affect user experience in any way, only
code quality.
---------
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
In order to determine who deleted a message, Octobot fetches the audit
log with a filter on the action "Message Delete", gets the latest entry
and uses its author if the timestamps roughly match. However, if the
filter returns no entries (as in, no message deletions are present in
the audit log), `Single()` will throw an exception with the message
`Sequence contains no elements`. To fix this, this PR replaces
`Single()` with `SingleOrDefault()` and adds a null-check on `auditLog`
in the form of a pattern access
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Closes #311
This change fixes unexpected behavior when a member's Discord roles get
desynchronized with their MemberData roles (e.g. when a member gets
role-muted). In addition this results in less API requests being made
when there are cache misses (commands should execute faster)
---------
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Apparently the `[UsedImplicitly]` annotation suppresses the "Class has
no inheritors and can be marked sealed" warning. Cool to know.
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
who tf thought that putting 1234915912 methods responsible for 23981
commands in a single class was a good idea???????
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
1. The root namespace was changed from `Octobot` to
`TeamOctolings.Octobot`:
> DO prefix namespace names with a company name to prevent namespaces
from different companies from having the same name.
2. `Octobot.cs` was renamed to `Program.cs`:
> DO NOT use the same name for a namespace and a type in that namespace.
3. `IOption`, `Option` were renamed to `IGuildOption` and `GuildOption`
respectively:
> DO NOT introduce generic type names such as Element, Node, Log, and
Message.
4. `Utility` was moved out of the `Services` namespace. It didn't belong
there anyway
5. `Program` static fields were moved to `Utility`
6. Localisation files were moved back to the project source files. Looks
like this fixed `Message.Designer.cs` code generation
---------
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Originally I did not enable because "stack traces are expensive to
retrieve", but let's be honest, who cares, this is a Discord bot,
there's no such thing as "good performance"
This PR *should* disable creating Dependabot PRs for patch updates.
These updates often don't contain significant changes and only clutter
the PR feed in addition to taking the maintainers' time
In this PR, I made the logo link in /about use HEAD instead of hardcoded
branch.
---------
Signed-off-by: mctaylors <cantsendmails@mctaylors.ru>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
Due to the shutdown of Wii U online services on April 8 at 23:00 UTC
(which affects Splatoon for Wii U), I'm opening a PR to memorialize
Splatoon multiplayer on Wii U by replacing bot music with Maritime
Memory on April 8-9.
Signed-off-by: mctaylors <cantsendmails@mctaylors.ru>
295 PR/issues ~(not 300, however)~ or ~1.5 years ago, I made #2, the
Russian language replacement aka mctaylors-ru. This was my first
contribution to the Octobot project (formerly known as Boyfriend). This
was to add some sort of unique, unusual feature to Octobot, which
doesn't have any moderator bots. Everyone loved the language. But it
just became difficult to maintain. I certainly don't want to get rid of
it, but it leaves me no other choice. This isn't a joke or anything like
that. I'm tired of maintaining it. And I'm sure the other contributors
are too.
This PR removes the mctaylors-ru language.
---------
Signed-off-by: mctaylors <cantsendmails@mctaylors.ru>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
PR's name speaks for itself. It might also be useful to update the logo
more easily.
---------
Signed-off-by: Macintxsh <95250141+mctaylors@users.noreply.github.com>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
Octobot has various moderation commands such as /ban, /mute, /kick.
These commands add multiple features to Discord's built-in functions
(such as durations and logging). Some admins may want to force their
users to use Octobot's commands instead of Discord UI functions.
However, due to the current design, they can't take away the permissions
as that remove access to the respective command.
This PR adds the `ModeratorRole` option which allows anyone who has
`ManageMessages` permission and the role to perform any moderator
action.
If the role is not set, the Discord permissions are checked instead. If
the user doesn't have the role, but has the permission, they can still
run the command.
---------
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This change makes Octobot split the message clear log into multiple
messages when the combined length of cleared messages exceeds the
maximum length for an embed description.
Closes #180
In LoggerExtensions#LogResult we skip logging the result if the error is
"user or environment error". What matches that criteria is defined by
Remora's implementation.
However, none of errors defined by the implementation should *ever* happen or be ignored:
* CommandNotFoundError: The client shouldn't send us non-existing
commands. This *can* happen because the client's command list can get
out of sync with the server's, but this happens rarely.
* AmbiguousCommandInvocationError: We don't have commands that would
trigger this error
* RequiredParameterValueMissingError: The client shouldn't send us
commands without required paremeters
* ParameterParsingError: See #220
* ConditionNotSatisfiedError: The client shouldn't send us commands that
don't satisfy our conditions
Closes #220
GitInfo's `RepositoryUrl` string depends on origin URL, which is
unvalidated user input that isn't even guaranteed to exist. This can
cause issues that are almost impossible to
debug
Closes #281
This PR has been opened to finally update Octobot's Wiki.
Current changes summary:
- correct minor spelling issues in some command descriptions
- /about: add Octobot's Wiki button
---------
Signed-off-by: mctaylors <cantsendmails@mctaylors.ru>
i thought there would be a lot of statements that could be merged, but
these are only ones I could find, apparently
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This feature will improve the debugging experience for developers by
providing the information about *where exactly* a result has failed
---------
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This will better align with how a normal moderator would respond to the
log:
Before: "see log" -> "jump to message without knowing what changed" ->
"read message diff"
After: "see log" -> "read message diff" -> "jump to message for context"
In addition, the change improves consistency with how reminders are
shown.
---------
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This change significantly reduces the code space used by properties
while maintaining clarity on types. Since only properties are allowed to
use expression bodies, it is clear to developers that what they are
looking at is a property or not
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
In this PR, I'm disabling the Report Issue button if a "dirty" version
is detected. This is done just in case so that "smart" developers don't
accidentally report a bug that they themselves created.
---------
Signed-off-by: mctaylors <cantsendmails@mctaylors.ru>