1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-01-31 17:19:00 +03:00
Commit graph

54 commits

Author SHA1 Message Date
neroduckale
59c2c5eada
Add link to original message for activated reminders and /listremind (#203) 2023-12-11 23:38:26 +03:00
neroduckale
bcd1db8c8e
Fix inspection warnings (#208)
Signed-off-by: neroduckale <100025711+neroduckale@users.noreply.github.com>
2023-12-06 00:24:55 +05:00
18cdc63883
Add StringBuilder & Markdown extensions (#206)
In this PR, I have added StringBuilder extensions to avoid `.Append`
reuse such as `.Append("- ").AppendLine()`

Closes #205

---------

Signed-off-by: mctaylors <cantsendmails@mctaylors.ru>
2023-12-04 17:09:47 +03:00
b166300642
Update CDN links for Octobot banner (#192)
Old CDN links are no longer working and they must be changed to new
links to display Octobot banner properly.
2023-11-22 08:34:40 +00:00
5f0d806213
Use IFeedbackService interface instead of implementation (#178)
This PR replaces usages of the `FeedbackService` implementation with the
`IFeedbackService` interface. Using concrete implementations breaks the
whole point of dependency injection, so it doesn't make sense to use
them
2023-11-04 23:28:22 +05:00
0ba357e4c7
Limit string argument length to avoid "embed description too long" errors (#174)
This PR fixes an error that would appear if a string that's way too long
was passed as a command argument by limiting the string's length

![image](https://github.com/LabsDevelopment/Octobot/assets/61277953/8f8267fd-d382-4a24-b92d-5f9966d7563b)
2023-10-28 23:10:16 +05:00
fb3aebb1e0
Notify user when a command execution error occurs (#171)
With this PR, whenever command execution fails, the user will get an
error message with details of the error that can be passed on to
developers

An unrelated minor change: errors caused by task cancellations will no
longer be logged

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Signed-off-by: mctaylors <mctaylxrs@outlook.com>
2023-10-26 14:54:15 +00:00
5b84c8d8d0
Add more info output to /delremind (#173)
_There are times when you want to be sure of what you've destroyed._

Therefore, in this PR I added the output of the text of the deleted
reminder along with its position in the list, because you can make a
mistake with deleting a reminder and forget about what you needed to be
reminded about.

---------

Signed-off-by: mctaylors <mctaylxrs@outlook.com>
2023-10-26 17:41:47 +03:00
b30d690113
Add filtering by message author to /clear (#169)
Closes #164 

This PR adds an optional argument to `/clear` - `author` of type User.

If the user is specified, only messages sent by that user will be
cleared. Simple as that.
2023-10-17 12:20:58 +00:00
e6f53b13f0
Split extension methods into separate classes (#161)
This PR splits the extension methods contained in `Extensions.cs` into
separate classes in the `Octobot.Extensions` namespace. This was done
for multiple reasons:
1) The `Extensions.cs` violates SRP (Single Responsibility Principle) -
it takes upon itself every extension method for many types
2) Having a separate class for each extended type is a standard practice
- take a look at
[Remora.Discord](https://github.com/Remora/Remora.Discord/tree/main/Backend/Remora.Discord.Rest/Extensions)
or [osu!](https://github.com/ppy/osu/tree/master/osu.Game/Extensions)
3) Having all extension methods in one file makes it hard to find the
method you want
2023-10-12 15:37:25 +00:00
8b659a6582
Rename Reminder message to Reminder text (#157)
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-10-06 14:20:18 +00:00
d1e3558bc6
/remind: Switch away from zero-based numbering and rename index (#155)
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-10-06 14:17:48 +00:00
a70c228bc4
Change reminders sorting in /listremind (#156)
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-10-06 16:12:36 +03:00
4748c5de2c
Rename /showinfo to avoid confusion with /guildinfo (#153)
Depends on #152

Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
2023-10-06 15:35:08 +03:00
72f728323e
Add /guildinfo (#152)
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-10-06 15:23:45 +03:00
2ab020a2b4
Change IUser variable and parameter names to be less confusing (#149)
note: there are still instances of `IUser user` because I could not find
a better name for them

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-10-04 15:21:10 +00:00
f7b59c173f
Use one common method in /mute (#145)
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
2023-10-04 13:27:05 +00:00
777dbc6eec
Update /random (#138)
Updates in /random:
- Set default minimum number to 0.
- Show maximum & minimum numbers.
- Recolor & display a message when user tries to use exact same number in first and second fields for some reason.
- Mention user in small title.
- Automatically detect max & min numbers.
- Add `long` support.
- Show what default number is.

---------

Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
Signed-off-by: Apceniy <53149450+Apceniy@users.noreply.github.com>
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
Co-authored-by: Apceniy <53149450+Apceniy@users.noreply.github.com>
2023-10-04 15:32:54 +03:00
7cf200d8de
Fix /unmute not checking if the target is muted (#143)
Closes #142

---------

Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-10-03 17:25:28 +03:00
413b8a4781
Add /timestamp (#140)
Original idea from @Octol1ttle

---------

Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-10-03 15:07:41 +03:00
6247a55a35
Use Snowflake#Empty extension method instead of '== 0' checks (#134) 2023-09-30 15:53:05 +00:00
804bcd6e68
Rebrand to Octobot (#128)
We're moving!

---------

Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-09-30 18:58:32 +05:00
2e2f50908e
Add /random (#127)
It could have been a milestone PR, but of course I made a mistake
_somewhere_.

---------

Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-09-29 16:22:44 +00:00
04897cab20
Redesign embeds (#123)
TODO before merging:

- [x] /about
- [x] /ban
- [x] /unban
- [x] /kick
- [x] /mute
- [x] /unmute
- [x] /remind
- [x] /listremind
- [x] MessageEditedResponder
- [x] MessageDeletedResponder

---------

Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-09-29 18:36:16 +03:00
0f916d46de
Add /showinfo (#122)
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-09-29 15:31:45 +03:00
1ab5a640a9
Set MemberData.BannedUntil to null in /unban (#114)
Please keep `MemberData` clean of unnecessary values.

---------

Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
2023-09-27 12:47:43 +03:00
3a3865ba3d
Add /resetsettings (#111)
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-09-22 20:23:08 +03:00
1e8b7e5373
Add mute role support & fix /unmute (#109)
- Added support for `MuteRole`, now if you add any role to this setting,
then try to mute a member, all his roles will be removed except for the
one you set in this setting.
- Fixed `/unmute`, that tried to set target's display name to unmute
reason.

---------

Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-09-21 20:16:09 +03:00
b796b885a1
Change logo CDN (#108)
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
2023-09-19 06:23:02 +05:00
438ecfb41b
Force enumeration of global collections before using them (#106)
This PR closes #105 

This PR fixes exceptions caused by changing a collection's contents
while it is being enumerated. This can often happen with Guild- and
MemberDatas. By using `ToArray()` on these global collections and using
it in the `foreach` loop, we create a new copy of the collection,
preventing any modification to it.

While this does introduce a lot of memory allocations, there is no
fixing that. Usually, the fix to these exceptions would be to convert
the `foreach` to a reverse-`for`. However, because indices cannot be
used on these collections, that is not possible.

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-09-12 16:28:46 +03:00
5831f5205c
Add autocomplete for /editsettings setting keys (#98)
This PR adds autocomplete for setting keys in `/editsetting` slash
command. The usage of options provided by auto-complete is enforced
client-side.

Closes #97
Closes #95

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-08-22 07:45:46 +00:00
324f455404
Rename settings commands (#94)
This PR renames commands `/settingslist` and `/settings` to
`/listsettings` and `/editsettings` respectively. This helps avoid
confusion and accidental use of the wrong command while conforming to a
common naming style, similar to remind commands.

cc @mctaylors wiki needs updating

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-08-22 02:18:58 +03:00
5937fae552
Change organization name references from TeamOctolings to LabsDevelopment (#93)
we are moving!

(6 commits because I was too lazy to open the IDE)

---------

Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
2023-08-20 20:27:16 +00:00
da2a88246c
Add failed embed for /listremind (#88)
Without this embed, if there are no reminders created by the user, the
bot will endlessly think because StringBuilder will be empty and normal
embed will not be shown.
2023-08-14 07:45:56 +00:00
87dbb07dec
EventEarlyNotification timestamp bugfix and other changes (#84)
This PR fixes EventEarlyNotification timestamp not displaying correctly
and also has some other changes:
- Add xmldocs for `/settingslist`'s `page` option in
SettingsCommandGroup.cs
- Add option description for `index` for `/delreminder`
- Some corrections of grammatical errors in Messages.tt-ru.resx
- Fix `ArgumentOutOfRangeException` in `/settingslist` that appears if
the user uses a negative integer in `page`

---------

Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-08-12 20:19:07 +00:00
488a1eec0c
Add /listremind and /delremind (#82)
This PR closes #61.

This PR adds the `/listremind` command and the `/delremind` command. The
`/delremind` command requires an index to determine which reminder to
delete.

cc @mctaylors review embed design and feature experience

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-08-12 13:54:51 +00:00
f260681b39
Split GuildUpdateService into separate services (#80)
GuildUpdateService is a service that contains way too many
responsibilities with everything strictly coupled to each other. The
code is buggy, hard to refactor and swallows errors. This prompted me to
make this PR, which splits it into three independant services:
- SongUpdateService (responsible for changing songs presence);
- MemberUpdateService (responsible for updating member datas: unbanning
users, adding the default role, sending reminders, filtering nicknames);
- ScheduledEventUpdateService (responsible for updating scheduled
events: sending notifications, automatically starting events).

All of these services and their methods use Results to push errors all
the way up in the stack, making sure no error is missed. To make logging
and debugging easier, an extension method for `ILogger` was created -
`LogResult`. The method checks if the result was successful or if its
failure was caused by a user or environment error before logging
anything - providing cleaner code and logs. `ExceptionError`s will also
have their exception stacktrace and type logged (except in Remora code).

This PR also fixes an issue that prevented banned users from being
unbanned when their punishment was over.

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-08-05 18:02:40 +00:00
e9f7825e4a
Backfill member data when a guild is loaded or a new member joins it (#77)
This PR backfills member data when a guild is loaded or a new member
joins it. The reason for that is some actions that happen on member tick
(default role grant, nickname filtering) would only occur if a member
had data related to them (due to being banned or setting a reminder). In
addition, the `.editorconfig` was updated with new inspections provided
by a new release of Rider, 2023.2
See explanations for some changes in comments.

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-08-04 13:52:54 +00:00
c9a7fb79ab
Log guild setting changes to PrivateFeedbackChannel (#79)
This PR makes the bot log guild settings to the Private Feedback
Channel. The functionality was present in pre-Remora Boyfriend, but was
missing afterwards, so I will call this a bug, making this PR a bugfix.

cc @mctaylors - embed design needs review

![image](https://github.com/TeamOctolings/Boyfriend/assets/61277953/5680f0d6-82fc-4c0e-b4f0-815b082997ec)

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-08-03 20:32:38 +00:00
84e730838b
Add a new .editorconfig and reformat code (#76)
*I'll start working on features and bugfixes after this PR, I promise*
very short summary:
- no more braceless statements
- braces are on new lines now
- `sealed` on everything that can be `sealed`
- no more awkwardly looking alignment of fields/parameters
- no more `Service` suffix on service fields. yeah.
- no more `else`s. who needs them?
- code style is now enforced by CI

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-08-02 20:51:16 +00:00
f47ebe81c5
Do not wrap result errors when returning them (#73)
This PR removes the wrapping of in-house created result errors with
`Result.FromError` (I did not know this was possible until today, lol),
which reduces code verbosity and makes it easier to read, and replaces
`ArgumentNullError` with `ArgumentInvalidError` when retrieving IDs from
a command context, which, in my opinion, is more correct.

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-07-28 16:58:55 +00:00
a6df26af67
Resolving issues on #65 (#72)
Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
2023-07-26 18:07:05 +00:00
05fd343dce
Improved /settingslist + fixed /settings pt.1 (#65)
This PR is mainly aimed at improving /settingslist and fixing /settings

List of things to do before merging:
- [x] #62
- [x] Add the pages feature to /settingslist
- [x] Add bullets like these ->
![](https://github.com/TeamOctolings/Boyfriend/assets/95250141/fdf1a3b8-bb64-473d-9f57-bc6e34812811)

And since the development has already been taking more than 2 days, I
suggest splitting the PR into 2 parts.

List of other things that will be in the future PR:
- mctaylors#1
- Fix bot not answering when an invalid setting is specified in
/settings
- Options list for /settings

---------

Signed-off-by: Macintosh II <95250141+mctaylors@users.noreply.github.com>
2023-07-25 19:53:11 +05:00
7b722a45cb
Rename users who attempt to hoist themselves (#53)
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Signed-off-by: mctaylors <95250141+mctaylors@users.noreply.github.com>
Co-authored-by: nrdk <neroduck@vk.com>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-07-24 19:51:05 +03:00
dependabot[bot]
abce09f26d
Bump Remora.Discord.Interactivity from 4.5.0 to 4.5.1 (#68)
Bumps Remora.Discord.Interactivity from 4.5.0 to 4.5.1.

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-07-24 16:57:41 +05:00
b4748a18c5
Add Color and Public parameters to LogActionAsync (#64)
This PR adds the `color` and `isPublic` parameters to
`UtilityService#LogActionAsync`. Previously, all embeds would be sent in
both public and private feedback channels with the green embed color. It
is now possible to change these fields, allowing for usage of the red
color in punishment commands and allowing to hide the result of `/clear`
from public eyes.

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-07-23 23:07:36 +03:00
27b8f15e3b
Force maximum Cognitive Complexity via InspectCode (#60)
This PR uses a new feature of the InspectCode action: extensions. By
adding the `Cognitive Complexity` extension, InspectCode can provide
warnings and force the contributors to follow standards regarding
complex methods. This functionality was previously provided by
CodeFactor, but it is no longer used. Here's the full changelog of this
PR:
- Allowed Actions to run on push for any branch, not just `master`;
- Added `Cognitive Complexity` plugin for InspectCode;
- Significantly reduced complexity of KickCommandGroup, MuteCommandGroup
and GuildUpdateService

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-07-21 08:54:52 +05:00
4624b59a8a
Reduce method complexity of /clear (#56)
Depends on #54

This PR reduces the method complexity of
`ClearCommandGroup#ClearMessagesAsync` by doing the following:
- Splitting the command method into 2 parts: ExecuteClear and
ClearMessagesAsync. The former will check all the needed results and
will pass the outputs into the latter;
- Using the recently extracted method `UtilityService#LogActionAsync` to
log deletion of messages.

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-07-20 10:44:07 +03:00
daa1dd4184
General fixes (#54)
Depends on #55

These changes are really small and I don't know how to reasonably split
them into multiple PRs, but here's the changelog:
- The result of the `UtilityService#LogActionAsync` call in
`BanCommandGroup#BanUserAsync` is no longer ignored and it's errors will
now prevent feedback from being sent;
- Converted `if` statement to a `return` with ternary in
`LanguageOption`;
- Slightly decreased method complexity of
`MessageDeletedResponder#RespondAsync` by cleverly using Results;
- Changed the order of parameters for `UtilityService#LogActionAsync` to
flow better;
- Removed the exemption for `ConvertIfToReturnStatement` for
InspectCode.

---------

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-07-20 07:36:21 +00:00
e2bf083189
Reduce method complexity in /ban, /unban and some other commands (#50)
This PR does numerous things to reduce method complexity:
- Created an extension method
`FeedbackService#SendContextualEmbedResultAsync`, which directly takes a
`Result<Embed>` and checks it once in the extension method instead of
multiple times in all commands;
- Split the command methods for `/ban` and `/unban` into 2 parts:
`Execute(Un)Ban` and `(Un)BanUserAsync`. The former will check all the
needed results and will pass the outputs into the latter;
- Extracted the method for logging an action into Private- and
PublicFeedbackChannels. It now resides in UtilityService. Right now,
only `/ban` and `/unban` make use of that method;
- Created an extension method `Snowflake#EmptyOrEqualTo`, that combines
the task of checking if a Snowflake is empty and checking if that
Snowflake is equal to another Snowflake.

Similar changes will be made to other command groups in future PRs. This
is not done here to make the reviewing process easier.

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
2023-07-19 21:08:44 +00:00