コード例 #1
0
async def removeQuote(cls:"PhaazebotDiscord", Command:DiscordCommand, CommandContext:DiscordCommandContext) -> dict:

	specific_id:str = CommandContext.part(1)
	if specific_id:
		if not specific_id.isdigit():
			specific_id = ""

	if not specific_id:
		return {"content": ":warning: You need to define a numeric quote ID to remove."}

	quote:list = await getDiscordServerQuotes(cls, Command.server_id, quote_id=specific_id)

	if not quote:
		return {"content": f":warning: There is no Quote with ID #{specific_id}"}

	DQuote:DiscordQuote = quote[0]

	cls.BASE.PhaazeDB.deleteQuery("""
		DELETE FROM `discord_quote`
		WHERE `discord_quote`.`guild_id` = %s
		AND `discord_quote`.`id` = %s""",
		( str(DQuote.guild_id), str(DQuote.quote_id) )
	)

	return {"content": f":white_check_mark: Quote #{specific_id} removed"}
コード例 #2
0
async def removeQuote(cls:"PhaazebotDiscord", Command:DiscordCommand, CommandContext:DiscordCommandContext) -> dict:

	specific_id:str = CommandContext.part(1)
	if specific_id:
		if not specific_id.isdigit():
			specific_id = ""

	if not specific_id:
		return {"content": ":warning: You need to define a numeric quote ID to remove."}

	quote:list = await getDiscordServerQuotes(cls, guild_id=Command.server_id, quote_id=specific_id)

	if not quote:
		return {"content": f":warning: There is no Quote with ID #{specific_id}"}

	DQuote:DiscordQuote = quote[0]

	cls.BASE.PhaazeDB.deleteQuery("""
		DELETE FROM `discord_quote`
		WHERE `discord_quote`.`guild_id` = %s
		AND `discord_quote`.`id` = %s""",
		(str(DQuote.guild_id), str(DQuote.quote_id))
	)

	log_coro:Coroutine = loggingOnQuoteDelete(cls, CommandContext.ServerSettings, Deleter=CommandContext.Message.author, quote_id=DQuote.quote_id, deleted_content=DQuote.content)
	asyncio.ensure_future(log_coro, loop=cls.BASE.DiscordLoop)

	return {"content": f":white_check_mark: Quote #{specific_id} removed"}
コード例 #3
0
ファイル: showquote.py プロジェクト: The-CJ/Phaazebot
async def showQuote(cls: "PhaazebotDiscord", Command: DiscordCommand,
                    CommandContext: DiscordCommandContext) -> dict:

    specific_id: str = CommandContext.part(1)
    if specific_id:
        if not specific_id.isdigit():
            specific_id = ""

    search: dict = dict()
    search["guild_id"] = Command.server_id
    search["quote_id"] = specific_id
    search["limit"] = 1

    if not specific_id:
        search["order_str"] = "ORDER BY RAND()"

    quote: list = await getDiscordServerQuotes(cls, **search)

    if not quote and not specific_id:
        return {
            "content": ":grey_exclamation: This server don't has any Quotes"
        }
    elif not quote and specific_id:
        return {
            "content":
            f":warning: No quote found with id {specific_id} on this server"
        }
    else:
        Quote: DiscordQuote = quote[0]

        Emb = discord.Embed(description=str(Quote.content))
        Emb.set_footer(text=f"ID: {str(Quote.quote_id)}")
        return {"embed": Emb}
コード例 #4
0
ファイル: formater.py プロジェクト: HeapUnderfl0w/Phaazebot
async def formatVars(Command: DiscordCommand,
                     CommandContext: DiscordCommandContext) -> str:

    format_str: str = Command.content

    replace_index: dict = {
        "user-name": CommandContext.Message.author.name,
        "user-mention": CommandContext.Message.author.mention,
        "channel-name": CommandContext.Message.channel.name,
        "channel-mention": CommandContext.Message.channel.mention,
        "server-name": CommandContext.Message.guild.name,
        "member-count": str(CommandContext.Message.guild.member_count),
        "uses": str(Command.uses)
    }

    # check for and replace all [varname] [varname2] ...
    VarHits: Iterator = re.finditer(ReDiscord.CommandVariableString,
                                    format_str)
    for VarMatch in VarHits:
        name: str = VarMatch.group("name")

        if name in replace_index:
            format_str = format_str.replace(VarMatch.group(0),
                                            replace_index[name])

    # check for and replace all $0 $4 $5 ...
    PositionMatch: Iterator = re.finditer(ReDiscord.CommandPosString,
                                          format_str)
    for PosMatch in PositionMatch:
        rep: str = CommandContext.part(int(PosMatch.group("pos")))
        if not rep: rep = ""
        format_str = format_str.replace(PosMatch.group(0), rep)

    return format_str
コード例 #5
0
ファイル: assignrole.py プロジェクト: HeapUnderfl0w/Phaazebot
async def assignRole(cls: "PhaazebotDiscord", Command: DiscordCommand,
                     CommandContext: DiscordCommandContext) -> dict:

    Perm: discord.Permissions = CommandContext.Message.channel.permissions_for(
        CommandContext.Message.guild.me)
    if not Perm.manage_roles:
        return {
            "content":
            ":no_entry_sign: Phaaze don't has a role with the `Manage Roles` permission."
        }

    role_trigger: str = CommandContext.part(1)

    if not role_trigger:
        return {"content": ":warning: Missing a role-trigger"}

    roles: list = await getDiscordServerAssignRoles(cls,
                                                    Command.server_id,
                                                    trigger=role_trigger)

    if not roles:
        return {
            "content":
            f":warning: Could not find any assign role associated with: `{role_trigger}`"
        }

    WantedDiscordRole: discord.Role = CommandContext.Message.guild.get_role(
        int(roles.pop(0).role_id))

    if CommandContext.Message.guild.me.top_role < WantedDiscordRole:
        return {
            "content":
            f":no_entry_sign: The Role `{WantedDiscordRole.name}` is to high. Phaaze highest role has to be higher in hierarchy then `{WantedDiscordRole.name}`"
        }

    if WantedDiscordRole in CommandContext.Message.author.roles:
        await CommandContext.Message.author.remove_roles(
            WantedDiscordRole,
            reason=f"Removed via assignrole, trigger='{role_trigger}'")
        return {
            "content":
            f":white_check_mark: Successfull removed the role `{WantedDiscordRole.name}` from you."
        }

    else:
        await CommandContext.Message.author.add_roles(
            WantedDiscordRole,
            reason=f"Added via assignrole, trigger='{role_trigger}'")
        return {
            "content":
            f":white_check_mark: Successfull added you the role: `{WantedDiscordRole.name}`"
        }
コード例 #6
0
async def removeAssignRole(cls:"PhaazebotDiscord", Command:DiscordCommand, CommandContext:DiscordCommandContext) -> dict:

	specific_trigger:str = CommandContext.part(1)
	if not specific_trigger:
		return {"content": ":warning: You need to define the role-trigger to remove."}

	roles:list = await getDiscordServerAssignRoles(cls, Command.server_id, trigger=specific_trigger)

	if not roles:
		return {"content": f":warning: There is no assign role with trigger `{specific_trigger}`"}

	Role:DiscordAssignRole = roles[0]

	cls.BASE.PhaazeDB.deleteQuery("""
		DELETE FROM `discord_assignrole`
		WHERE `discord_assignrole`.`guild_id` = %s
		AND `discord_assignrole`.`trigger` = %s""",
		( str(Role.guild_id), str(Role.trigger) )
	)

	return {"content": f":white_check_mark: Assign role `{Role.trigger}` removed"}
コード例 #7
0
async def removeAssignRole(cls: "PhaazebotDiscord", Command: DiscordCommand,
                           CommandContext: DiscordCommandContext) -> dict:

    specific_trigger: str = CommandContext.part(1)
    if not specific_trigger:
        return {
            "content":
            ":warning: You need to define the role-trigger to remove."
        }

    roles: list = await getDiscordServerAssignRoles(cls,
                                                    guild_id=Command.server_id,
                                                    trigger=specific_trigger)

    if not roles:
        return {
            "content":
            f":warning: There is no assign role with trigger `{specific_trigger}`"
        }

    Role: DiscordAssignRole = roles[0]

    cls.BASE.PhaazeDB.deleteQuery(
        """
		DELETE FROM `discord_assignrole`
		WHERE `discord_assignrole`.`guild_id` = %s
		AND `discord_assignrole`.`trigger` = %s""",
        (str(Role.guild_id), str(Role.trigger)))

    # Log
    log_coro: Coroutine = loggingOnAssignroleDelete(
        cls,
        CommandContext.ServerSettings,
        Deleter=CommandContext.Message.author,
        assign_role_trigger=Role.trigger)
    asyncio.ensure_future(log_coro, loop=cls.BASE.DiscordLoop)

    return {
        "content": f":white_check_mark: Assign role `{Role.trigger}` removed"
    }
コード例 #8
0
ファイル: showquote.py プロジェクト: HeapUnderfl0w/Phaazebot
async def showQuote(cls:"PhaazebotDiscord", Command:DiscordCommand, CommandContext:DiscordCommandContext) -> dict:

	specific_id:str = CommandContext.part(1)
	if specific_id:
		if not specific_id.isdigit():
			specific_id = ""

	if specific_id:
		random:bool = False
	else:
		random:bool = True

	quote:list = await getDiscordServerQuotes(cls, Command.server_id, quote_id=specific_id, random=random, limit=1)

	if not quote and not specific_id:
		return {"content": ":grey_exclamation: This server don't has any Quotes"}
	elif not quote and specific_id:
		return {"content": f":warning: No quote found with id {specific_id} on this server"}
	else:
		Quote:DiscordQuote = quote[0]

		Emb = discord.Embed(description=str(Quote.content))
		Emb.set_footer(text=f"ID: {str(Quote.quote_id)}")
		return {"embed": Emb}
コード例 #9
0
async def levelLeaderboard(cls: "PhaazebotDiscord", Command: DiscordCommand,
                           CommandContext: DiscordCommandContext) -> dict:

    # other than, normal, mod or regular commands that get blocked in commands.py
    # we can not tell if that command is a level command until now, so we end it now

    # owner disabled level commands serverwide
    if CommandContext.ServerSettings.owner_disable_level:
        return {}

    # same as above just for a a specific channel
    if CommandContext.Message.channel.id in CommandContext.ServerSettings.disabled_levelchannels:
        return {}

    specific_len: Union[int, str] = CommandContext.part(1)
    if specific_len:
        if not specific_len.isdigit():
            specific_len = DEFAULT_LEADERBOARD_LEN
        else:
            specific_len = int(specific_len)

    else:
        specific_len = DEFAULT_LEADERBOARD_LEN

    if not specific_len or specific_len > MAX_LEADERBOARD_LEN:
        return {
            "content":
            f":warning: `{specific_len}` is unsupported, length must be between 1 and 15"
        }

    users: list = await getDiscordServerUsers(cls,
                                              guild_id=Command.server_id,
                                              limit=specific_len,
                                              order_str="ORDER BY exp DESC")

    if not users:
        return {
            "content":
            ":question: Seems like there are no member with level for a leaderboard :("
        }

    # there are less member ín the return than the limit requests, very rare
    if len(users) < specific_len:
        specific_len = len(users)

    return_table: list = [["#", "|", "LVL", "|", "EXP", "|", "Name"],
                          ["---", "|", "---", "|", "---", "|", "---"]]

    for LevelUser in users:

        e: str = " [EDITED]" if LevelUser.edited else ""
        lvl: str = prettifyNumbers(LevelCalc.getLevel(LevelUser.exp))
        exp: str = prettifyNumbers(LevelUser.exp)
        Member: discord.Member = CommandContext.Message.guild.get_member(
            int(LevelUser.member_id))
        if Member:
            user_name: str = Member.name
        else:
            user_name: str = "[N/A]"

        return_table.append(
            [f"#{LevelUser.rank}", "|", lvl, "|", f"{exp}{e}", "|", user_name])

    table: str = tabulate(return_table, tablefmt="plain")

    return {
        "content":
        f"**Top: {specific_len} leaderboard** :link: {cls.BASE.Vars.web_root}/discord/level/{Command.server_id} ```{table}```"
    }
コード例 #10
0
async def addAssignRole(cls: "PhaazebotDiscord", Command: DiscordCommand,
                        CommandContext: DiscordCommandContext) -> dict:

    Perm: discord.Permissions = CommandContext.Message.channel.permissions_for(
        CommandContext.Message.guild.me)
    if not Perm.manage_roles:
        return {
            "content":
            ":no_entry_sign: Phaaze don't has a role with the `Manage Roles` permission."
        }

    trigger: str = CommandContext.part(1)
    query_str: str = " ".join(CommandContext.parts[2:])

    if not trigger or not query_str:
        return {
            "content":
            ":warning: You need to define a role-trigger and a role."
        }

    AssignRole: discord.Role = getDiscordRoleFromString(
        cls,
        CommandContext.Message.guild,
        query_str,
        Message=CommandContext.Message)
    if not AssignRole:
        return {
            "content":
            f":warning: Could not find any role matching: `{query_str}`"
        }

    res: list = cls.BASE.PhaazeDB.selectQuery(
        """
		SELECT
			COUNT(*) AS `all`,
			SUM(
				CASE WHEN `discord_assignrole`.`role_id` = %s OR LOWER(`discord_assignrole`.`trigger`) = LOWER(%s)
				THEN 1 ELSE 0 END
			) AS `match`
		FROM `discord_assignrole`
		WHERE `discord_assignrole`.`guild_id` = %s""",
        (str(AssignRole.id), trigger, str(Command.server_id)))

    if res[0]["all"] >= cls.BASE.Limit.DISCORD_ASSIGNROLE_AMOUNT:
        return {
            "content":
            ":no_entry_sign: This server hit the assign role limit, please remove some first."
        }

    if res[0]["match"] >= 1:
        return {
            "content":
            ":no_entry_sign: This Assignrole or the used trigger already exists."
        }

    if CommandContext.Message.guild.me.top_role < AssignRole:
        return {
            "content":
            f":no_entry_sign: The Role `{AssignRole.name}` is to high. Phaaze highest role has to be higher in hierarchy then `{AssignRole.name}`"
        }

    cls.BASE.PhaazeDB.insertQuery(table="discord_assignrole",
                                  content=dict(guild_id=str(Command.server_id),
                                               role_id=str(AssignRole.id),
                                               trigger=trigger))

    return {
        "content":
        f":white_check_mark: Successfull added assign role `{str(AssignRole)}` with trigger `{trigger}`"
    }