黑名单 SQL 数据库。不工作 Discord.py

Blacklist SQL Database. Not working Discord.py

db = sqlite3.connect("BlacklistedUsers.db")
c = db.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS "BlacklistedUser_IDs" (
    "User_IDs"  INTEGER,
    "Reason"    TEXT,
    PRIMARY KEY("User_IDs")
);''')

def owner_ID(ctx):
    return ctx.author.id == 738332946934661132

def not_allowed(ctx):
    member = ctx.discord.member.id
    c.execute("SELECT `User_IDs` FROM `BlacklistedUser_IDs` WHERE `User_IDs`=%s", (member))
    UserID = cursor.fetchall()
    if ctx.author.id not in UserID:
        print(UserID)
        return True
    else:
        return False

@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.CheckFailure):
        embed = discord.Embed(title="", description="", colour=discord.Color.red())
        embed.set_author(name="BlackListed!")
        embed.add_field(name="Sorry", value=f"{ctx.author} It looks like you've been Blacklisted! for {Reason}", inline=False)
        embed.add_field(name="If you would like to Appeal Or think this might have been a mistake Message", value="@L Y N X", inline=False)
        await ctx.send(embed=embed)

@bot.command()
@commands.check(owner_ID)
async def blacklist(ctx, member: discord.Member, *, reason=None):
    c.execute("INSERT INTO `BlacklistedUser_IDs`(User_IDs, Reason) VALUES(%s, %s)", (member.id, reason))
    db.commit()
    embed = discord.Embed(title="", description="", colour=discord.Color.red())
    embed.set_author(name="Blacklisted!")
    embed.add_field(name="Success", value=f"{member.name}#{member.discriminator} -- {member.id} Has been Blacklisted from Using commands!")
    embed.add_field(name="Reason : ", value=f"{reason}")
    await ctx.send(embed=embed)

@bot.command()
@commands.check(owner_ID)
async def unblacklist(ctx, member: discord.Member):
    c.execute("DELETE FROM BlacklistedUser_IDs WHERE User_IDs =%s AND Reason=%s;", (member.id, reason))
    db.commit()
    embed = discord.Embed(title="", description="", colour=discord.Color.red())
    embed.set_author(name="Unblacklisted!")
    embed.add_field(name="Success", value=f"{member.name}#{member.discriminator} -- {member.id} Has been Unblacklisted from Using commands!")
    await ctx.send(embed=embed)

当尝试 运行 这个命令时,它不会 运行 句号.. 它会 运行 任何高于 SQL 但当涉及到 SQL 它不会 运行,用于黑名单和取消黑名单?一切看起来都是正确的,所以我对哪里出了问题感到困惑..

任何解决方案//问题修复?

您的代码示例中存在一些问题:

  • 你插入数据的方式不对
  • dbc 未定义
  • 您的 commands.check() 装饰器似乎有误

假设您的 table 名字是 table,它有两行分别命名为 row_1row_2。如果你想插入两个值,例如 var_1var_2,你可以这样做:

with sqlite3.connect('database.db') as connection:
    cursor = connection.cursor()
    cursor.execute('INSERT INTO table(row_1, row_2) VALUES(?, ?)', (var_1, var_2))
    connection.commit()

您的第二个错误可能来自 @commands.check(owner_ID)。如果它只是一个 ID,您使用的是 commands.check() the wrong way. In this case, if your goal is to make this command only accessible for the bot creator, you can use @commands.is_owner():

@bot.command()
@commands.is_owner()
async def blacklist(ctx, member: discord.Member, *, reason=None):
    ...

进行所有这些更改后,您的代码将如下所示:

from sqlite3 import connect

@bot.command()
@commands.is_owner()
async def blacklist(ctx, member: discord.Member, *, reason=None):
    with connect('BlacklistedUsers.db') as conn:
        c = conn.cursor()
        c.execute("INSERT INTO BlacklistedUser_IDs(User_IDs, Reason) VALUES(?, ?)", (member.id, reason))
        conn.commit()

    embed = discord.Embed(colour=discord.Color.red())
    embed.set_author(name="Blacklisted!")
    embed.add_field(name="Success", value=f"{member.name}#{member.discriminator} -- {member.id} Has been Blacklisted from Using commands!")
    embed.add_field(name="Reason :", value=f"{reason}")
    await ctx.send(embed=embed)

对于您的 is_allowed() 功能:请注意,我将 ctx 更改为 member_id,因为您只需要会员 ID。当您调用此函数时,您只需传递成员 ID(例如 is_allower(ctx.member.id)):

def not_allowed(member_id):
    with connect('BlacklistedUsers.db') as conn:
        c = conn.cursor()
        c.execute("SELECT User_IDs FROM BlacklistedUser_IDs WHERE User_IDs=?", (member,))
    UserIDs = cursor.fetchall()
    return False if member_id in UserIDs else True