* Added GetJumpUrl() as an IMessage extension method
* Removed extra line for consistency
* Moved the namespace from Discord.Commands to Discord
* lint: remove eof newline
* lint: use TextChannel to get GuildID
* Update deps, fix test warnings.
* Support ns2.0
* Fix typo
* Remove ns1.1 support
* Net.Http and Net.Websockets.Client are not needed in ns2.0
* Move to net46 per volt
* Remove ns1.3 constants
* Add ability to support different types of quotation marks
* Added normal quotation mark to list of aliases, removed single quote mark
* clean up leftover changes from testing
* change quotation mark parsing to use a map of matching pairs
* remove commented out code
* Fix conventions of the command parser utility functions
* change storage type of alias dictionary to be IReadOnlyDictionary
* revert type of CommandServiceConfig QuotationMarkAliasMap to Dictionary
* minor formatting changes to CommandParser
* remove unnecessary whitespace
* Move aliases outside of CommandInfo class
* copy IReadOnlyDictionary to ImmutableDictionary
* minor syntax changes in CommandServiceConfig
* add newline before namespace for consistency
* newline formatting tweak
* simplification of GetMatch method for CommandParser
* add more quote unicode punctuation pairs
* add check for null value when building ImmutableDictionary
* Move default alias map into a separate source file
* Ensure that the collection passed into command service is not null
* Allow setting IgnoreExtraArgs on an individual basis
* Remove passing in the flag as a separate parameter
* VS plz
* Push the RunMode setting out to its own attribute, because fox wants consistency.
Bonus: Removes the need for that godawful 'RunMode.Default'.
* Revert previous commit
* Fox doesn't like module-wide switches 😒
To reply with just a rich embed, users have to invoke ReplyAsync with
`ReplyAsync("", embed: embed)`, which seems wasteful, when they only
need to specify the embed.
In f19730e4, AddModule(s)Async was changed so that the IServiceProvider
was optional, both at compile time and runtime. This had the side effect
of meaning that there was no longer a compile-time hint that users would
need to pass an IServiceProvider to AddModulesAsync. I assumed this
would not be an issue - users would recognize the runtime exception here
and self correct - but activity in our Discord support channel would
indicate otherwise.
We now require the user to explicitly opt-out of dependency injection -
they are still free to pass null in place of an IServiceProvider if they
do not intend to use one, and the library will handle this at runtime.
IServiceProvider does not support scopes by itself - this is a behavior
introduced by Microsoft's DI container. As such, not all DI containers
may support an IScopeFactory the way that Microsoft's DI is expecting
them to.
This also means that our builtin EmptyServiceProvider does not support
scopes - meaning that users who do not use a DI container can not invoke
commands.
* Set usage of TokenType.User as an error rather than a warning.
* Remove commented sections and #pragma's
Additionally, changes use of ReadMessages to ViewChannel since that Obsolete was also suppressed by the pragma
If one is not passed, they will default to an EmptyServiceProvider
This resolves issues where since the merging of OnModuleBuilding, users
were effectively forced to use the DI pattern, where before they were
not.
While this isn't necessarily a bad idea, we shouldn't just change this
behavior for no reason (though I assume making the IServiceProvider
argument required was a mistake)
This fixes an issue where custom ModuleBases that contained a generic
parameter would be loaded as a module - only to fail when trying to be
built.
Realistically, ModuleBases _should_ be abstract - but it was still a bug
that we allowed them to be included as a module.
commit 5b047bf02b
Author: Joe4evr <jii.geugten@gmail.com>
Date: Fri Feb 2 22:22:00 2018 +0100
[feature/OnModuleAdded] Quickstart fixes (#946)
* Quickstart: fix minor derp
* Other overdue fixes
commit bd3e9eee94
Author: Christopher F <computerizedtaco@gmail.com>
Date: Sat Jan 27 16:51:18 2018 -0500
Resort usings in ModuleBase
commit 8042767579
Author: Christopher F <computerizedtaco@gmail.com>
Date: Sat Jan 27 16:41:39 2018 -0500
Clean up removed owned IServiceProvider
commit 30066cb102
Author: Christopher F <computerizedtaco@gmail.com>
Date: Sat Jan 27 16:37:22 2018 -0500
Remove redundant try-catch around OnModuleBuilding invocation
If this exception is going to be rethrown, there's no reason to include
a try-catch.
commit 60c7c31d44
Author: Christopher F <computerizedtaco@gmail.com>
Date: Sat Jan 27 16:36:27 2018 -0500
Include the ModuleBuilder in OnModuleBuilding
This allows modules hooking into OnModuleBuilding method to mutate
theirselves at runtime.
commit b6a9ff5786
Author: Joe4evr <jii.geugten@gmail.com>
Date: Mon Jan 22 13:17:14 2018 +0100
#DERP
commit f623d19c68
Author: Joe4evr <jii.geugten@gmail.com>
Date: Mon Jan 22 13:15:31 2018 +0100
Resolution for #937 because it's literally 4 lines of code
commit 8272c9675b
Author: Joe4evr <jii.geugten@gmail.com>
Date: Mon Jan 22 11:39:28 2018 +0100
Re-adjust quickstart
commit e30b907135
Author: Joe4evr <jii.geugten@gmail.com>
Date: Mon Jan 22 11:35:08 2018 +0100
Undo experimental changes, request IServiceProvider instance everywhere instead
commit ad7e0a46c8
Author: Joe4evr <jii.geugten@gmail.com>
Date: Fri Jan 19 03:40:27 2018 +0100
Fix quickstart leftover from previous draft
commit e3349ef3d4
Author: Joe4evr <jii.geugten@gmail.com>
Date: Fri Jan 19 03:33:46 2018 +0100
Doc comment on items
commit 81bd9111fa
Author: Joe4evr <jii.geugten@gmail.com>
Date: Fri Jan 19 03:16:44 2018 +0100
Add comment about the ServiceProviderFactory in the quickstart
commit 72b5e6c8a1
Author: Joe4evr <jii.geugten@gmail.com>
Date: Fri Jan 19 03:10:40 2018 +0100
Remove superfluous comments, provide simpler alternative for setting the ServiceProvider.
commit 74b17b0e04
Author: Joe4evr <jii.geugten@gmail.com>
Date: Tue Jan 16 18:06:28 2018 +0100
Experimental change for feedback
commit 7b100e99bb
Author: Joe4evr <jii.geugten@gmail.com>
Date: Mon Jan 15 23:34:06 2018 +0100
* Make the service provider parameters required
* Adjust quickstart guide to reflect changes
commit 7f1b792946
Author: Joe4evr <jii.geugten@gmail.com>
Date: Mon Jan 15 20:04:37 2018 +0100
I..... missed one.
commit 031b289d80
Author: Joe4evr <jii.geugten@gmail.com>
Date: Mon Jan 15 20:02:20 2018 +0100
Rename method to more intuitive 'OnModuleBuilding'
commit 9a166ef1d0
Author: Joe4evr <jii.geugten@gmail.com>
Date: Mon Jan 15 19:09:10 2018 +0100
Add callback method for when a module class has been added to the CommandService.
* Apply consistency to attributes in the commands extension
This resolves#527.
Not sure if I missed any, putting this up for review.
* Allow preconditions to be used multiple times (for use with groups)
* Improve Boolean Property Summaries
Having the `CaseSensitiveCommands` property summary asking a question whenever Intellisense is invoked seems a bit nonessential instead of *properly* explaining what exactly it does. It would be better if instead, it stated it's use to be more comprehensible to the reader.
### Changes
- Edits the summaries of `CaseSensitiveCommands` and `ThrowOnError` to follow a more methodical convention for boolean property summaries (`Determines whether X ...` rather than `Should X be ... ?`).
This is just a small change to improve upon the current documentation, so it shouldn't conflict with anything.
* "DefaultRunMode should also be "Gets or sets blah blah blah" to be consistent."
* Add NullableTypeReader.
Primitives now also load a NullableTypeReader<T> and any value types that get a typereader added will also have a NullableTypeReader<T> added for it.
* Remove unnecessary null check.
* Added docstrings.
* Allow commands to return a Task<RuntimeResult>
This allows bot developers to centralize command result logic by
using result data whether the command as successful or not.
Example usage:
```csharp
var _result = await Commands.ExecuteAsync(context, argPos);
if (_result is RuntimeResult result)
{
await message.Channel.SendMessageAsync(result.Reason);
}
else if (!_result.IsSuccess)
{
// Previous error handling
}
```
The RuntimeResult class can be subclassed too, for example:
```csharp
var _result = await Commands.ExecuteAsync(context, argPos);
if (_result is MySubclassedResult result)
{
var builder = new EmbedBuilder();
for (var pair in result.Data)
{
builder.AddField(pair.Key, pair.Value, true);
}
await message.Channel.SendMessageAsync("", embed: builder);
}
else if (_result is RuntimeResult result)
{
await message.Channel.SendMessageAsync(result.Reason);
}
else if (!_result.IsSuccess)
{
// Previous error handling
}
```
* Make RuntimeResult's ctor protected
* Make RuntimeResult abstract
It never really made sense to have it instantiable in the first place,
frankly.
* Allow arbitrary attributes to be added to commands
I still don't approve adding type info back into commands, so
I decided to use this solution for allowing arbitrary attributes to be
added to commands.
Add attributes property to ParameterBuilder
Add Attributes properties to info types
* Why on earth git
* Add using for system so that Attribute can be used
* C#7 features in commands, CommandInfo in ModuleBase
* Update TypeReaders with C#7 features and IServiceProvider
* Add best-choice command selection to CommandService
* Normalize type reader scores correctly
* Fix logic error and rebase onto dev
* Change GetMethod for SetMethod in ReflectionUtils
Should be checking against setters, not getters
* Ensure args/params scores do not overwhelm Priority
* Remove possibility of NaNs