Exemplo n.º 1
0
async def set_guild_announcements(guild, channel, setting):
    if setting == "enable":
        setting = True
    else:
        setting = False

    if guild is not None:
        ideal_guild = tinydb.Query()

        async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
            results = guildDB.search(ideal_guild.id == guild.id)

            item = {
                "announce": setting,
                "announcechannel": channel.id,
                "announcechannelname": channel.name
            }

            if len(results) > 0:
                guildDB.update(item, ideal_guild.id == guild.id)
            else:
                item["id"] = guild.id
                guildDB.insert(item)

            return True

    return False
Exemplo n.º 2
0
async def set_guild_votd_time(guild, channel, time):
    if len(time) != 5:
        return False

    ideal_guild = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
        results = guildDB.search(ideal_guild.id == guild.id)

        if len(results) > 0:
            if time != "clear":
                guildDB.update(
                    {
                        "time": time,
                        "channel": channel.id,
                        "channel_name": channel.name
                    }, ideal_guild.id == guild.id)
            else:
                guildDB.update(aiotinydb.operations.delete("time"),
                               ideal_guild.id == guild.id)
                guildDB.update(aiotinydb.operations.delete("channel"),
                               ideal_guild.id == guild.id)
                guildDB.update(aiotinydb.operations.delete("channel_name"),
                               ideal_guild.id == guild.id)
        else:
            guildDB.insert({
                "id": guild.id,
                "time": time,
                "channel": channel.id,
                "channel_name": channel.name
            })

        return True
Exemplo n.º 3
0
async def get_versions_by_acronym():
    async with aiotinydb.AIOTinyDB(central.versionDB_path) as versionDB:
        results = versionDB.all()
        versions = []

        for result in results:
            versions.append(result["abbv"])

        return sorted(versions)
Exemplo n.º 4
0
async def is_optout(entryid):
    ideal_entry = tinydb.Query()

    async with aiotinydb.AIOTinyDB(optoutDB_path) as optoutDB:
        result = optoutDB.search(ideal_entry.id == entryid)

        if len(result) > 0:
            return True
        else:
            return False
Exemplo n.º 5
0
async def get_version(user):
    ideal_user = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.db_path) as db:
        results = db.search(ideal_user.id == user.id)

        if len(results) > 0:
            if "version" in results[0]:
                return results[0]["version"]

        return None
Exemplo n.º 6
0
async def get_guild_language(guild):
    if guild is not None:
        ideal_guild = tinydb.Query()

        async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
            results = guildDB.search(ideal_guild.id == guild.id)

            if len(results) > 0:
                if "language" in results[0]:
                    return results[0]["language"]

            return "english"
Exemplo n.º 7
0
async def get_guild_votd_time(guild):
    if guild is not None:
        ideal_guild = tinydb.Query()

        async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
            results = guildDB.search(ideal_guild.id == guild.id)

            if len(results) > 0:
                if "channel_name" in results[0] and "time" in results[0]:
                    return results[0]["channel_name"], results[0]["time"]

            return None
Exemplo n.º 8
0
async def get_guild_brackets(guild):
    if guild is not None:
        ideal_guild = tinydb.Query()

        async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
            results = guildDB.search(ideal_guild.id == guild.id)

            if len(results) > 0:
                if "brackets" in results[0]:
                    return results[0]["brackets"]

            return central.brackets
Exemplo n.º 9
0
async def get_verse_numbers(user):
    ideal_user = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.db_path) as db:
        results = db.search(ideal_user.id == user.id)

        if len(results) > 0:
            if "verseNumbers" in results[0]:
                return results[0]["verseNumbers"]
            else:
                return "enable"
        else:
            return "enable"
Exemplo n.º 10
0
async def set_version(user, version):
    version = version.upper()

    ideal_version = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.versionDB_path) as versionDB:
        version_results = versionDB.search(ideal_version.abbv == version)

        if len(version_results) > 0:
            ideal_user = tinydb.Query()

            async with aiotinydb.AIOTinyDB(central.db_path) as db:
                results = db.search(ideal_user.id == user.id)

                if len(results) > 0:
                    db.update({"version": version}, ideal_user.id == user.id)
                else:
                    db.insert({"id": user.id, "version": version})

                return True

        return False
Exemplo n.º 11
0
async def add_optout(entryid):
    ideal_entry = tinydb.Query()

    async with aiotinydb.AIOTinyDB(optoutDB_path) as optoutDB:
        result = optoutDB.search(ideal_entry.id == entryid)

        if len(result) > 0:
            return False
        else:
            db.remove(ideal_entry.id == entryid)
            guildDB.remove(ideal_entry.id == entryid)

            optoutDB.insert({"id": entryid})
            return True
Exemplo n.º 12
0
async def set_guild_version(guild, version):
    version = version.upper()

    ideal_version = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.versionDB_path) as versionDB:
        version_results = versionDB.search(ideal_version.abbv == version)

        if len(version_results) > 0:
            ideal_guild = tinydb.Query()

            async with aiotinydb.AIOTinyDB(central.db_path) as guildDB:
                results = guildDB.search(ideal_guild.id == guild.id)

                if len(results) > 0:
                    guildDB.update({"version": version},
                                   ideal_guild.id == guild.id)
                else:
                    guildDB.insert({"id": guild.id, "version": version})

                return True

        return False
Exemplo n.º 13
0
async def run_timed_votds(bot):
    await bot.wait_until_ready()

    current_time = datetime.datetime.utcnow().strftime("%H:%M")

    async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
        results = [
            x for x in guildDB.all()
            if "channel" in x and x["time"] == current_time
        ]

        count = 0

        for item in results:
            if "channel" in item and "time" in item:
                channel = bot.get_channel(item["channel"])

                try:
                    version = await versions.get_guild_version(channel.guild)
                    lang = await languages.get_guild_language(channel.guild)
                except AttributeError:
                    version = "RSV"
                    lang = "english"

                if not version:
                    version = "RSV"

                if not lang:
                    lang = "english"

                lang = central.get_raw_language(lang)

                if channel:
                    reference = await bibleutils.get_votd()
                    result = await utils.get_bible_verse(
                        reference, "embed", version, "enable", "enable")

                    if result:
                        try:
                            await channel.send(lang["votd"])
                            await channel.send(embed=result["embed"])
                        except discord.errors.Forbidden:
                            pass
                        count += 1

        if count > 0:
            central.log_message(
                "info", 0, "votd_sched", "global",
                f"Sending {str(count)} VOTDs at {current_time}...")
Exemplo n.º 14
0
async def get_mode(user):
    ideal_user = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.db_path) as db:
        results = db.search(ideal_user.id == user.id)

        if len(results) > 0:
            if "mode" in results[0]:
                if results[0]["mode"] == "default":
                    return "embed"
                else:
                    return results[0]["mode"]
            else:
                return "embed"
        else:
            return "embed"
Exemplo n.º 15
0
async def set_language(user, language):
    # noinspection PyBroadException
    try:
        if getattr(central.languages, language) is not None:
            ideal_user = tinydb.Query()

            async with aiotinydb.AIOTinyDB(central.db_path) as db:
                results = db.search(ideal_user.id == user.id)

                if len(results) > 0:
                    db.update({"language": language}, ideal_user.id == user.id)
                else:
                    db.insert({"id": user.id, "language": language})

            return True
    except Exception:
        return False
Exemplo n.º 16
0
async def set_verse_numbers(user, verse_numbers):
    verse_numbers = verse_numbers.lower()

    if verse_numbers != "enable" and verse_numbers != "disable":
        return False

    ideal_user = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.db_path) as db:
        results = db.search(ideal_user.id == user.id)

        if len(results) > 0:
            db.update({"verseNumbers": verse_numbers}, ideal_user.id == user.id)
        else:
            db.insert({"id": user.id, "verseNumbers": verse_numbers})

        return True
Exemplo n.º 17
0
async def set_headings(user, headings):
    headings = headings.lower()

    if headings != "enable" and headings != "disable":
        return False

    ideal_user = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.db_path) as db:
        results = db.search(ideal_user.id == user.id)

        if len(results) > 0:
            db.update({"headings": headings}, ideal_user.id == user.id)
        else:
            db.insert({"id": user.id, "headings": headings})

    return True
Exemplo n.º 18
0
async def get_guild_announcements(guild, notice):
    if guild is not None:
        ideal_guild = tinydb.Query()

        async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
            results = guildDB.search(ideal_guild.id == guild.id)

            if len(results) > 0:
                if "announce" in results[0]:
                    if not notice:
                        return results[0]["announcechannel"], results[0][
                            "announce"]
                    else:
                        return results[0]["announcechannelname"], results[0][
                            "announce"]

    return None
Exemplo n.º 19
0
async def set_mode(user, mode):
    mode = mode.lower()
    modes = ["default", "embed", "blockquote", "code"]

    if mode not in modes:
        return False

    ideal_user = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.db_path) as db:
        results = db.search(ideal_user.id == user.id)

        if len(results) > 0:
            db.update({"mode": mode}, ideal_user.id == user.id)
        else:
            db.insert({"id": user.id, "mode": mode})

        return True
Exemplo n.º 20
0
async def set_guild_language(guild, language):
    # noinspection PyBroadException
    try:
        if getattr(central.languages, language) is not None:
            ideal_guild = tinydb.Query()

            async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
                results = guildDB.search(ideal_guild.id == guild.id)

                if len(results) > 0:
                    guildDB.update({"language": language},
                                   ideal_guild.id == guild.id)
                else:
                    guildDB.insert({"id": guild.id, "language": language})

                return True
    except Exception:
        return False
Exemplo n.º 21
0
async def get_language(user):
    ideal_user = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.db_path) as db:
        results = db.search(ideal_user.id == user.id)

        languages = get_languages()

        if len(results) > 0:
            if "language" in results[0]:
                for item in languages:
                    if item["object_name"] == results[0]["language"]:
                        if results[0]["language"] in [
                                "english_us", "english_uk"
                        ]:
                            return "english"

                        return results[0]["language"]

        return None
Exemplo n.º 22
0
async def set_guild_brackets(guild, brackets):
    if len(brackets) != 2:
        return False

    if brackets not in ["<>", "()", "{}", "[]"]:
        return False

    ideal_guild = tinydb.Query()

    async with aiotinydb.AIOTinyDB(central.guildDB_path) as guildDB:
        results = guildDB.search(ideal_guild.id == guild.id)

        item = {
            "first": brackets[0],
            "second": brackets[1]
        }

        if len(results) > 0:
            guildDB.update({"brackets": item}, ideal_guild.id == guild.id)
        else:
            guildDB.insert({"id": guild.id, "brackets": item})

        return True
Exemplo n.º 23
0
async def run_command(ctx, command, remainder):
    lang = ctx["language"]
    user = ctx["author"]
    guild = ctx["guild"]
    channel = ctx["channel"]
    args = remainder.split(" ")

    if command == "biblebot":
        pages = biblebot.create_biblebot_embeds(lang)

        return {"level": "info", "paged": True, "pages": pages}
    elif command == "search":
        version = await utils.get_version(user, guild)
        return await paged_commands.search(version, remainder, lang)
    elif command == "versions":
        return paged_commands.get_versions(lang)
    elif command == "setversion":
        if await versions.set_version(user, args[0]):
            embed = utils.create_embed(lang["commands"]["setversion"],
                                       lang["setversionsuccess"])

            return {"level": "info", "message": embed}
        else:
            embed = utils.create_embed(lang["commands"]["setversion"],
                                       lang["setversionfail"].replace(
                                           "<versions>",
                                           lang["commands"]["versions"]),
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "setguildversion":
        perms = user.guild_permissions

        if not perms:
            embed = utils.create_embed(lang["commands"]["setguildversion"],
                                       lang["setguildversionnoperm"],
                                       error=True)

            return {"level": "err", "message": embed}

        if str(user.id) != central.config["BibleBot"]["owner"]:
            if not perms.manage_guild:
                embed = utils.create_embed(lang["commands"]["setguildversion"],
                                           lang["setguildversionnoperm"],
                                           error=True)

                return {"level": "err", "message": embed}

        if await versions.set_guild_version(guild, args[0]):
            embed = utils.create_embed(lang["commands"]["setguildversion"],
                                       lang["setguildversionsuccess"])

            return {"level": "info", "message": embed}
        else:
            embed = utils.create_embed(lang["commands"]["setguildversion"],
                                       lang["setguildversionfail"].replace(
                                           "<versions>",
                                           lang["commands"]["versions"]),
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "version":
        version = await versions.get_version(user)

        if version is not None:
            response = lang["versionused"]

            response = response.replace("<version>", version)
            response = response.replace("<setversion>",
                                        lang["commands"]["setversion"])

            embed = utils.create_embed(lang["commands"]["version"], response)

            return {"level": "info", "message": embed}
        else:
            response = lang["noversionused"]
            response = response.replace("<setversion>",
                                        lang["commands"]["setversion"])

            embed = utils.create_embed(lang["commands"]["version"],
                                       response,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "guildversion":
        version = await versions.get_guild_version(guild)

        if version is not None:
            response = lang["guildversionused"]

            response = response.replace("<version>", version)
            response = response.replace("<setguildversion>",
                                        lang["commands"]["setguildversion"])

            embed = utils.create_embed(lang["commands"]["guildversion"],
                                       response)

            return {"level": "info", "message": embed}
        else:
            response = lang["noguildversionused"]
            response = response.replace("<setguildversion>",
                                        lang["commands"]["setguildversion"])

            embed = utils.create_embed(lang["commands"]["guildversion"],
                                       response,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "versioninfo":
        ideal_version = tinydb.Query()

        async with aiotinydb.AIOTinyDB(central.versionDB_path) as versionDB:
            results = versionDB.search(ideal_version["abbv"] == args[0])

            if len(results) > 0:
                response = lang["versioninfo"]

                response = response.replace("<versionname>",
                                            results[0]["name"])

                def check_validity(section):
                    if results[0]["has" + section]:
                        return lang["arguments"]["yes"]
                    else:
                        return lang["arguments"]["no"]

                for category in ["OT", "NT", "DEU"]:
                    response = response.replace(f"<has{category}>",
                                                check_validity(category))

                embed = utils.create_embed(lang["commands"]["versioninfo"],
                                           response)

                return {"level": "info", "message": embed}
            else:
                embed = utils.create_embed(lang["commands"]["versioninfo"],
                                           lang["versioninfofailed"],
                                           error=True)

                return {"level": "err", "message": embed}
    elif command == "setlanguage":
        if await languages.set_language(user, args[0]):
            embed = utils.create_embed(lang["commands"]["setlanguage"],
                                       lang["setlanguagesuccess"])

            return {"level": "info", "message": embed}
        else:
            embed = utils.create_embed(lang["commands"]["setlanguage"],
                                       lang["setlanguagefail"].replace(
                                           "<languages>",
                                           lang["commands"]["languages"]),
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "setguildlanguage":
        perms = user.guild_permissions

        if not perms:
            embed = utils.create_embed(lang["commands"]["setguildlanguage"],
                                       lang["setguildlanguagenoperm"],
                                       error=True)

            return {"level": "err", "message": embed}

        if str(user.id) != central.config["BibleBot"]["owner"]:
            if not perms.manage_guild:
                embed = utils.create_embed(
                    lang["commands"]["setguildlanguage"],
                    lang["setguildlanguagenoperm"],
                    error=True)

                return {"level": "err", "message": embed}

        if await languages.set_guild_language(guild, args[0]):
            embed = utils.create_embed(lang["commands"]["setguildlanguage"],
                                       lang["setguildlanguagesuccess"])

            return {"level": "info", "message": embed}
        else:
            description = lang["setguildlanguagefail"].replace(
                "<languages>", lang["commands"]["languages"])

            embed = utils.create_embed(lang["commands"]["setguildlanguage"],
                                       description,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "language":
        response = lang["languageused"]
        response = response.replace("<setlanguage>",
                                    lang["commands"]["setlanguage"])

        embed = utils.create_embed(lang["commands"]["language"], response)

        return {"level": "info", "message": embed}
    elif command == "guildlanguage":
        glang = await languages.get_guild_language(guild)
        glang = central.get_raw_language(glang)

        response = glang["guildlanguageused"]
        response = response.replace("<setguildlanguage>",
                                    glang["commands"]["setguildlanguage"])

        embed = utils.create_embed(glang["commands"]["guildlanguage"],
                                   response)

        return {"level": "info", "message": embed}
    elif command == "languages":
        available_languages = await languages.get_languages()

        string = ""

        for item in available_languages:
            if item["object_name"] != "default":
                string += item["name"] + " [`" + item["object_name"] + "`]\n"

        embed = utils.create_embed(lang["commands"]["languages"], string)

        return {"level": "info", "message": embed}
    elif command == "setguildbrackets":
        perms = user.guild_permissions

        if not perms:
            embed = utils.create_embed(lang["commands"]["setguildbrackets"],
                                       lang["setguildbracketsnoperm"],
                                       error=True)

            return {"level": "err", "message": embed}

        if str(user.id) != central.config["BibleBot"]["owner"]:
            if not perms.manage_guild:
                embed = utils.create_embed(
                    lang["commands"]["setguildbrackets"],
                    lang["setguildbracketsnoperm"],
                    error=True)

                return {"level": "err", "message": embed}

        if await formatting.set_guild_brackets(guild, args[0]):
            embed = utils.create_embed(lang["commands"]["setguildbrackets"],
                                       lang["setguildbracketssuccess"])

            return {"level": "info", "message": embed}
        else:
            embed = utils.create_embed(lang["commands"]["setguildbrackets"],
                                       lang["setguildbracketsfail"],
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "guildbrackets":
        brackets_dict = await formatting.get_guild_brackets(guild)
        brackets = brackets_dict["first"] + brackets_dict["second"]

        response = lang["guildbracketsused"]

        response = response.replace("<brackets>", brackets)
        response = response.replace("<setguildbrackets>",
                                    lang["commands"]["setguildbrackets"])

        embed = utils.create_embed(lang["commands"]["guildbrackets"], response)

        return {"level": "info", "message": embed}
    elif command == "setvotdtime":
        perms = user.guild_permissions

        if not perms:
            embed = utils.create_embed(lang["commands"]["setvotdtime"],
                                       lang["setvotdtimenoperm"],
                                       error=True)

            return {"level": "err", "message": embed}

        if str(user.id) != central.config["BibleBot"]["owner"]:
            if not perms.manage_guild:
                embed = utils.create_embed(lang["commands"]["setvotdtime"],
                                           lang["setvotdtimenoperm"],
                                           error=True)

                return {"level": "err", "message": embed}

        if await misc.set_guild_votd_time(guild, channel, args[0]):
            embed = utils.create_embed(lang["commands"]["setvotdtime"],
                                       lang["setvotdtimesuccess"])

            return {"level": "info", "message": embed}
        else:
            embed = utils.create_embed(lang["commands"]["setvotdtime"],
                                       lang["setvotdtimefail"],
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "clearvotdtime":
        perms = user.guild_permissions

        if not perms:
            embed = utils.create_embed(lang["commands"]["clearvotdtime"],
                                       lang["clearvotdtimenoperm"],
                                       error=True)

            return {"level": "err", "message": embed}

        if str(user.id) != central.config["BibleBot"]["owner"]:
            if not perms.manage_guild:
                embed = utils.create_embed(lang["commands"]["clearvotdtime"],
                                           lang["clearvotdtimenoperm"],
                                           error=True)

                return {"level": "err", "message": embed}

        if await misc.set_guild_votd_time(guild, channel, "clear"):
            embed = utils.create_embed(lang["commands"]["clearvotdtime"],
                                       lang["clearvotdtimesuccess"])

            return {"level": "info", "message": embed}
    elif command == "votdtime":
        time_tuple = await misc.get_guild_votd_time(guild)

        if time_tuple is not None:
            channel, time = time_tuple

            response = lang["votdtimeused"]

            response = response.replace("<time>", time + " UTC")
            response = response.replace("<channel>", channel)
            response = response.replace("<setvotdtime>",
                                        lang["commands"]["setvotdtime"])
            response = response.replace("<clearvotdtime>",
                                        lang["commands"]["clearvotdtime"])

            embed = utils.create_embed(lang["commands"]["votdtime"], response)

            return {"level": "info", "message": embed}
        else:
            response = lang["novotdtimeused"]
            response = response.replace("<setvotdtime>",
                                        lang["commands"]["setvotdtime"])

            embed = utils.create_embed(lang["commands"]["votdtime"],
                                       response,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command in ["votd", "verseoftheday"]:
        verse = await bibleutils.get_votd()
        mode = await formatting.get_mode(user)
        version = await utils.get_version(user, guild)
        headings = await formatting.get_headings(user)
        verse_numbers = await formatting.get_verse_numbers(user)

        return await utils.get_bible_verse(verse, mode, version, headings,
                                           verse_numbers)
    elif command == "random":
        verse = await bibleutils.get_random_verse()
        mode = await formatting.get_mode(user)
        version = await utils.get_version(user, guild)
        headings = await formatting.get_headings(user)
        verse_numbers = await formatting.get_verse_numbers(user)

        return await utils.get_bible_verse(verse, mode, version, headings,
                                           verse_numbers)
    elif command == "setheadings":
        if await formatting.set_headings(user, args[0]):
            embed = utils.create_embed(lang["commands"]["setheadings"],
                                       lang["headingssuccess"])

            return {"level": "info", "message": embed}
        else:
            response = lang["headingsfail"]

            response = response.replace("<setheadings>",
                                        lang["commands"]["setheadings"])
            response = response.replace("<enable>",
                                        lang["arguments"]["enable"])
            response = response.replace("<disable>",
                                        lang["arguments"]["disable"])

            embed = utils.create_embed(lang["commands"]["setheadings"],
                                       response,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "headings":
        headings = await formatting.get_headings(user)

        if headings == "enable":
            response = lang["headings"].replace("<enabled/disabled>",
                                                lang["enabled"])
            response = response.replace("<setheadings>",
                                        lang["commands"]["setheadings"])

            embed = utils.create_embed(lang["commands"]["headings"], response)

            return {"level": "info", "message": embed}
        else:
            response = lang["headings"].replace("<enabled/disabled>",
                                                lang["disabled"])
            response = response.replace("<setheadings>",
                                        lang["commands"]["setheadings"])

            embed = utils.create_embed(lang["commands"]["headings"], response)

            return {"level": "info", "message": embed}
    elif command == "setmode":
        if await formatting.set_mode(user, args[0]):
            embed = utils.create_embed(lang["commands"]["setmode"],
                                       lang["modesuccess"])

            return {"level": "info", "message": embed}
        else:
            response = lang["modefail"]

            response = response.replace("<setmode>",
                                        lang["commands"]["setmode"])

            embed = utils.create_embed(lang["commands"]["setmode"],
                                       response,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "mode":
        mode = await formatting.get_mode(user)
        modes = ["default", "embed", "blockquote", "code"]

        if mode in modes:
            response = lang["mode"].replace("<value>", mode)
            response = response.replace("<setmode>",
                                        lang["commands"]["setmode"])

            embed = utils.create_embed(lang["commands"]["mode"], response)

            return {"level": "info", "message": embed}
    elif command == "setversenumbers":
        if await formatting.set_verse_numbers(user, args[0]):
            embed = utils.create_embed(lang["commands"]["setversenumbers"],
                                       lang["versenumberssuccess"])

            return {"level": "info", "message": embed}
        else:
            response = lang["versenumbersfail"].replace(
                "<setversenumbers>", lang["commands"]["setversenumbers"])
            response = response.replace("<enable>",
                                        lang["arguments"]["enable"])
            response = response.replace("<disable>",
                                        lang["arguments"]["disable"])

            embed = utils.create_embed(lang["commands"]["setversenumbers"],
                                       response,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "versenumbers":
        verse_numbers = await formatting.get_verse_numbers(user)
        response = lang["versenumbers"].replace(
            "<setversenumbers>", lang["commands"]["setversenumbers"])

        if verse_numbers == "enable":
            response = response.replace("<enabled/disabled>", lang["enabled"])
        else:
            response = response.replace("<enabled/disabled>", lang["disabled"])

        embed = utils.create_embed(lang["commands"]["versenumbers"], response)

        return {"level": "info", "message": embed}
    elif command == "setannouncements":
        perms = user.guild_permissions

        if not perms:
            embed = utils.create_embed(lang["commands"]["setannouncements"],
                                       lang["setannouncementsnoperm"],
                                       error=True)

            return {"level": "err", "message": embed}

        if not perms.manage_guild:
            embed = utils.create_embed(lang["commands"]["setannouncements"],
                                       lang["setannouncementsnoperm"],
                                       error=True)

            return {"level": "err", "message": embed}

        if await misc.set_guild_announcements(guild, channel, args[0]):
            embed = utils.create_embed(lang["commands"]["setannouncements"],
                                       lang["setannouncementssuccess"])

            return {"level": "info", "message": embed}
        else:
            response = lang["setannouncementsfail"]

            response = response.replace("<setannouncements>",
                                        lang["commands"]["setannouncements"])
            response = response.replace("<enable>",
                                        lang["arguments"]["enable"])
            response = response.replace("<disable>",
                                        lang["arguments"]["disable"])

            embed = utils.create_embed(lang["commands"]["setannouncements"],
                                       response,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "announcements":
        announce_tuple = await misc.get_guild_announcements(guild, True)

        if announce_tuple is not None:
            channel, setting = announce_tuple

            if setting:
                response = lang["announcementsenabled"]
            else:
                response = lang["announcementsdisabled"]

            response = response.replace("<channel>", channel)
            response = response.replace("<setannouncements>",
                                        lang["commands"]["setannouncements"])

            embed = utils.create_embed(lang["commands"]["announcements"],
                                       response)

            return {"level": "info", "message": embed}
        else:
            response = lang["noannouncements"]
            response = response.replace("<setannouncements>",
                                        lang["commands"]["setannouncements"])

            embed = utils.create_embed(lang["commands"]["announcements"],
                                       response,
                                       error=True)

            return {"level": "err", "message": embed}
    elif command == "users":
        processed = len(ctx["self"].users)

        embed = utils.create_embed(lang["commands"]["users"],
                                   lang["users"] + ": " + str(processed))

        return {"level": "info", "message": embed}
    elif command == "servers":
        processed = len(ctx["self"].guilds)
        embed = utils.create_embed(
            lang["commands"]["servers"],
            lang["servers"].replace("<count>", str(processed)))

        return {"level": "info", "message": embed}
    elif command == "jepekula":
        version = await utils.get_version(user, guild)
        mode = await formatting.get_mode(user)
        headings = await formatting.get_headings(user)
        verse_numbers = await formatting.get_verse_numbers(user)

        return await utils.get_bible_verse("Mark 9:23-24", mode, version,
                                           headings, verse_numbers)
    elif command in special.cm_commands:
        return special.get_custom_message(command)
    elif command == "supporters":
        return special.get_supporters(lang)
    elif command == "creeds":
        return creeds.get_creeds(lang)
    elif command in creeds.creeds:
        return creeds.get_creed(command, lang)
    elif command == "catechisms":
        return catechisms.get_catechisms(lang)
    elif command == "invite":
        bot_id = ctx["self"].user.id

        return {
            "level":
            "info",
            "text":
            True,
            "message":
            f"https://discordapp.com/oauth2/authorize?client_id={bot_id}&scope=bot&permissions=93248"
        }
Exemplo n.º 24
0
    async def process_raw_message(cls, raw_message, sender, lang, guild):
        available_versions = versions.get_versions_by_acronym()
        brackets = formatting.get_guild_brackets(guild)
        msg = raw_message.content
        msg = " ".join(msg.splitlines())

        if brackets is None:
            brackets = central.brackets

        if " " in msg:
            verses = []

            msg = utils.purify(msg.title())

            results = utils.get_books(msg)
            results.sort(key=lambda item: item[
                1])  # sort the results based on the index that they were found

            for book, index in results:
                verse = utils.create_verse_object(book, index, msg,
                                                  available_versions, brackets)

                if verse != "invalid" and verse is not None:
                    skip = False

                    for key, val in verse.items():
                        if key is "book" or key is "chapter":
                            if val is None or val == "None":
                                skip = True

                    if not skip:
                        verses.append(verse)

            if len(verses) > 6:
                responses = [
                    "spamming me, really?", "no spam pls", "be nice to me",
                    "such verses, many spam", "\(º □ º l|l)/ SO MANY VERSES",
                    "don't spam me, i'm a good bot",
                    "hey buddy, get your own bot to spam",
                    "i'm a little robot, short and stout\n"
                    "stop spamming me or i'll claw your eyes out!"
                ]

                random_index = int(math.floor(random.random() *
                                              len(responses)))
                return [{"spam": responses[random_index]}]

            references = []

            for _, verse in enumerate(verses):
                reference = utils.create_reference_string(verse)

                if reference is not None:
                    references.append(reference)

            return_list = []

            for reference in references:
                version = versions.get_version(sender)
                mode = formatting.get_mode(sender)
                headings = formatting.get_headings(sender)
                verse_numbers = formatting.get_verse_numbers(sender)

                ref_split = reference.split(" | v: ")

                if len(ref_split) == 2:
                    reference = ref_split[0]
                    version = ref_split[1]

                if version is None or version == "REV":
                    version = versions.get_guild_version(guild)

                    if version is None or version == "REV":
                        version = "RSV"

                ideal_version = tinydb.Query()

                async with aiotinydb.AIOTinyDB(
                        central.versionDB_path) as versionDB:
                    results = versionDB.search(ideal_version.abbv == version)

                    if len(results) > 0:
                        for verse in verses:
                            for section in ["ot", "nt", "deu"]:
                                support = utils.check_section_support(
                                    results[0], verse, reference, section,
                                    lang)

                                if "ok" not in support.keys():
                                    return [support]

                        biblehub_versions = ["BSB", "NHEB", "WBT"]
                        # bibleserver_versions = ["LUT", "LXX", "SLT", "EU"]
                        apibible_versions = ["KJVA"]

                        non_bible_gateway = biblehub_versions + apibible_versions  # + bibleserver_versions

                        if version not in non_bible_gateway:
                            result = await biblegateway.get_result(
                                reference, version, headings, verse_numbers)
                            return_list.append(
                                utils.process_result(result, mode, reference,
                                                     version, lang))
                        elif version in apibible_versions:
                            result = await apibible.get_result(
                                reference, version, headings, verse_numbers)
                            return_list.append(
                                utils.process_result(result, mode, reference,
                                                     version, lang))
                        elif version in biblehub_versions:
                            result = await biblehub.get_result(
                                reference, version, verse_numbers)
                            return_list.append(
                                utils.process_result(result, mode, reference,
                                                     version, lang))
                        # elif version in bibleserver_versions:
                        #    result = await bibleserver.get_result(reference, version, verse_numbers)
                        #    return_list.append(utils.process_result(result, mode, reference, version, lang))

            return return_list
Exemplo n.º 25
0
async def run_owner_command(ctx, command, remainder):
    embed = discord.Embed()
    bot = ctx["self"]
    lang = ctx["language"]
    guild = ctx["guild"]
    channel = ctx["channel"]
    args = remainder.split(" ")

    if command == "puppet":
        message = ""

        for item in args:
            message += f"{item} "

        if message == " " or message == "":
            return

        try:
            await ctx["raw"].delete()
        except (discord.errors.Forbidden, discord.errors.HTTPException):
            pass

        await channel.send(message[0:-1])

        return None
    elif command == "eval":
        cmd = " ".join(args)
        fn_name = "_eval_expr"
        cmd = cmd.strip("` ")

        # add a layer of indentation
        cmd = "\n".join(f"    {i}" for i in cmd.splitlines())

        # wrap in def body
        body = f"async def {fn_name}():\n{cmd}"
        parsed = ast.parse(body)
        body = parsed.body[0].body

        utils.insert_returns(body)

        env = {
            'bot': ctx["self"],
            'discord': discord,
            '__import__': __import__,
            'channel': channel,
            'central': central
        }

        exec(compile(parsed, filename="<ast>", mode="exec"), env)

        result = (await eval(f"{fn_name}()", env))

        return {"level": "info", "text": True, "message": result}
    elif command == "announce":
        message = ""

        for item in args:
            message += f"{item} "

        embed = utils.create_embed("Announcement",
                                   message[0:-1],
                                   custom_title=True)

        return {"level": "info", "announcement": True, "message": embed}
    elif command == "addversion":
        argc = len(args)
        name = ""

        for i in range(0, (argc - 4)):
            name += f"{args[i]} "

        name = name[0:-1]
        abbv = args[argc - 4]

        has_ot = False
        has_nt = False
        has_deu = False

        if args[argc - 3] == "yes":
            has_ot = True

        if args[argc - 2] == "yes":
            has_nt = True

        if args[argc - 1] == "yes":
            has_deu = True

        new_version = Version(name, abbv, has_ot, has_nt, has_deu)

        async with aiotinydb.AIOTinyDB(central.versionDB_path) as versionDB:
            versionDB.insert(new_version.to_object())

            embed = utils.create_embed(lang["commands"]["addversion"],
                                       lang["addversionsuccess"])

            return {"level": "info", "message": embed}
    elif command == "rmversion":
        query = tinydb.Query()

        async with aiotinydb.AIOTinyDB(central.versionDB_path) as versionDB:
            result = versionDB.remove(query.abbv == args[0])

            if result:
                return {
                    "level": "info",
                    "text": True,
                    "message": f"Removed {result}."
                }
            else:
                return {
                    "level": "err",
                    "text": True,
                    "message": f"No version available to remove."
                }
    elif command == "userid":
        arg = ""

        for item in args:
            arg += f"{item} "

        split = arg[0:-1].split("#")
        results = "IDs matching: "

        if len(split) == 2:
            users = [
                x for x in ctx["bot"].users
                if x.name == split[0] and x.discriminator == split[1]
            ]

            for item in users:
                results += f"{str(item.id)}, "

            results = results[0:-2]
        else:
            results += "None"

        return {"level": "info", "text": True, "message": results}
    elif command == "optout":
        if central.is_snowflake(args[0]):
            if await central.add_optout(args[0]):
                return {
                    "level": "info",
                    "text": True,
                    "message": f"Opt out {args[0]}."
                }
            else:
                return {
                    "level": "err",
                    "text": True,
                    "message": f"{args[0]} is already opt out."
                }
        else:
            return {
                "level": "err",
                "text": True,
                "message": "This is not an ID."
            }
    elif command == "unoptout":
        if central.is_snowflake(args[0]):
            if await central.remove_optout(args[0]):
                return {
                    "level": "info",
                    "text": True,
                    "message": f"Unoptout {args[0]}."
                }
            else:
                return {
                    "level": "err",
                    "text": True,
                    "message": f"{args[0]} is not opt out."
                }
        else:
            return {
                "level": "err",
                "text": True,
                "message": "This is not an ID."
            }
    elif command == "leave":
        if len(args) > 0:
            server_name = ""

            for arg in args:
                server_name += arg + " "

            for item in ctx["bot"].guilds:
                if item.name == server_name[0:-1]:
                    await item.leave()
                    return {"level": "info", "leave": True}

            await channel.send("Server does not exist.")
            return None
        else:
            await guild.leave()
            return None
    elif command == "quit":
        await channel.send("Good night...")

        try:
            await bot.logout()
        except:
            pass