mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2026-01-20 07:03:00 -05:00
[Core] add [p]set api list and [p]set api remove (#4370)
* add get_shared_api_keys * add set listapi command * fix typo * refactor `[p]set listapi` into `[p]set api list` * remove unnecessary check * fix decorators * corrected wording * add remove_shared_api_services * add `set api remove` * further typo sniping * bugsniping * minor typo * aaaaaaaaa * Apply suggestions from code review Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com> * update api docstring to reflect new subcommands * Apply suggestions from code review Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> * update framework_apikeys.rst with new methods * Update redbot/core/bot.py Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> * rewrite get_shared_api_services into a special case of get_shared_api_tokens * rewrite api_list to include keys and tokens in response * don't show secrets * better api_remove response * black * remove nonexistent method * remove unnecessary import * fix wording * Improve docstrings and type hints - added overloads to help out developers a bit more * this wasn't necessary, but development tools work better with this information - fixed type hint to use Union as now its return type depends on whether `service_name` is passed - updated docstrings to contain information about the added behavior * Use `humanize_list()` rather than `str.join()` This is done for consistency within Red and it makes the list have the last element joined with `and` (or its equivalent in chosen locale) * Use `.format()` after translation is applied If `.format()` is used before `_()`, the search for translation is done with the string that already has the dynamic text added, which results in no matches. * Add plural support * Improve error message Updated message to be more specific (used phrases: "None of the services" and "had any keys set") and a bit more nice to the user (judging word "anyway" removed) * Improve readability of `[p]set api list` It's a lot clearer when the sublists are indented, especially on mobile where code blocks aren't colored at all. New look: https://user-images.githubusercontent.com/6032823/94614944-3bbd7c80-02a7-11eb-89e4-64bdf06c650b.png Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com> Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
This commit is contained in:
@@ -26,6 +26,7 @@ from typing import (
|
||||
Any,
|
||||
Literal,
|
||||
MutableMapping,
|
||||
overload,
|
||||
)
|
||||
from types import MappingProxyType
|
||||
|
||||
@@ -986,22 +987,37 @@ class RedBase(
|
||||
"""
|
||||
return await self._config.guild(discord.Object(id=guild_id)).mod_role()
|
||||
|
||||
async def get_shared_api_tokens(self, service_name: str) -> Dict[str, str]:
|
||||
@overload
|
||||
async def get_shared_api_tokens(self, service_name: str = ...) -> Dict[str, str]:
|
||||
...
|
||||
|
||||
@overload
|
||||
async def get_shared_api_tokens(self, service_name: None = ...) -> Dict[str, Dict[str, str]]:
|
||||
...
|
||||
|
||||
async def get_shared_api_tokens(
|
||||
self, service_name: Optional[str] = None
|
||||
) -> Union[Dict[str, Dict[str, str]], Dict[str, str]]:
|
||||
"""
|
||||
Gets the shared API tokens for a service
|
||||
Gets the shared API tokens for a service, or all of them if no argument specified.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
service_name: str
|
||||
The service to get tokens for.
|
||||
service_name: str, optional
|
||||
The service to get tokens for. Leave empty to get tokens for all services.
|
||||
|
||||
Returns
|
||||
-------
|
||||
Dict[str, str]
|
||||
Dict[str, Dict[str, str]] or Dict[str, str]
|
||||
A Mapping of token names to tokens.
|
||||
This mapping exists because some services have multiple tokens.
|
||||
If ``service_name`` is `None`, this method will return
|
||||
a mapping with mappings for all services.
|
||||
"""
|
||||
return await self._config.custom(SHARED_API_TOKENS, service_name).all()
|
||||
if service_name is None:
|
||||
return await self._config.custom(SHARED_API_TOKENS).all()
|
||||
else:
|
||||
return await self._config.custom(SHARED_API_TOKENS, service_name).all()
|
||||
|
||||
async def set_shared_api_tokens(self, service_name: str, **tokens: str):
|
||||
"""
|
||||
@@ -1051,6 +1067,25 @@ class RedBase(
|
||||
for name in token_names:
|
||||
group.pop(name, None)
|
||||
|
||||
async def remove_shared_api_services(self, *service_names: str):
|
||||
"""
|
||||
Removes shared API services, as well as keys and tokens associated with them.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
*service_names: str
|
||||
The services to remove.
|
||||
|
||||
Examples
|
||||
----------
|
||||
Removing the youtube service
|
||||
|
||||
>>> await ctx.bot.remove_shared_api_services("youtube")
|
||||
"""
|
||||
async with self._config.custom(SHARED_API_TOKENS).all() as group:
|
||||
for service in service_names:
|
||||
group.pop(service, None)
|
||||
|
||||
async def get_context(self, message, *, cls=commands.Context):
|
||||
return await super().get_context(message, cls=cls)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user