Source code for discordSuperUtils.Prefix

from typing import (
    Union,
    Any
)

import discord
from discord.ext import commands

from .Base import DatabaseChecker


[docs]class PrefixManager(DatabaseChecker): def __init__(self, bot: commands.Bot, default_prefix: str, mentioned: bool = False): super().__init__([{'guild': 'snowflake', 'prefix': 'string'}], ['prefixes']) self.default_prefix = default_prefix self.bot = bot self.mentioned = mentioned self.prefix_cache = {} bot.command_prefix = self.__get_prefix
[docs] async def get_prefix(self, guild: Union[discord.Guild, Any]) -> str: if guild.id in self.prefix_cache: return self.prefix_cache[guild.id] prefix = await self.database.select(self.tables['prefixes'], ['prefix'], {'guild': guild.id}) prefix = prefix["prefix"] if prefix else self.default_prefix self.prefix_cache[guild.id] = prefix return prefix
[docs] async def set_prefix(self, guild: discord.Guild, prefix: str) -> None: self.prefix_cache[guild.id] = prefix await self.database.updateorinsert(self.tables['prefixes'], {'prefix': prefix}, {'guild': guild.id}, {'guild': guild.id, 'prefix': prefix})
async def __get_prefix(self, bot, message: discord.Message) -> str: self._check_database() if not message.guild: return commands.when_mentioned_or(self.default_prefix)(bot, message) if self.mentioned else self.default_prefix prefix = await self.get_prefix(message.guild) return commands.when_mentioned_or(prefix)(bot, message) if self.mentioned else prefix