我不明白为什么用户数据没有被输入数据库

问题描述 投票:0回答:1

我正在创建一个不和谐的机器人,它将用户数据从服务器输入到数据库中,例如 ID、用户名、昵称和角色。为此,我使用discord.py 和Supabase。它在控制台中没有显示任何错误。

import discord
from discord.ext import commands

from supabase import create_client, Client

url: str = "my_url"
key: str = "my_key"
supabase: Client = create_client(url, key)

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.event
async def on_ready():
    print("Бот запущен!")

    for  guild in bot.guilds:
        for member in guild.members:
            post = {
                "id": member.id,
                "username": member.name,
                "nickname": member.display_name,
                "role": member.roles
            }

            response = supabase.table("usersDiscord").select("*").eq("id", member.id).execute()
            if response == []:
               response = supabase.table("usersDiscord").insert(post).execute()

@bot.event
async def on_member_join(member):
    post = {
        "id": member.id,
        "username": member.name,
        "nickname": member.display_name,
        "role": member.roles
    }

    response = supabase.table("usersDiscord").select("*").eq("id", member.id).execute()
    if response == []:
        response = supabase.table("usersDiscord").insert(post).execute()

bot.run("my_token")

也许问题发生在我试图检查数据库中是否已经存在具有给定 id 的用户的地方。这个检查的目的是,如果存在这样的用户,那么就不要将他添加到数据库中,如果不存在这样的用户,那么就需要添加他。

response = supabase.table("usersDiscord").select("*").eq("id", member.id).execute()
    if response == []:
        response = supabase.table("usersDiscord").insert(post).execute()
python discord discord.py supabase
1个回答
0
投票

这不起作用可能有多种原因。乍一看,这不像是代码问题。

  • 首先(也是最有可能的)我会检查 RLS 策略(启用行级安全性 (RLS))并查看它们是否正确设置(您应该能够读取/写入要对其进行操作的表)

  • 另一个原因可能是您保存的字段格式不正确(例如 ID 设置为 INT(8) 并且您在其中保存字符串)

  • 另一个原因可能是您尝试写入的字段已经传播,或者它们是其他表约束的一部分,例如另一个没有该条目的表上的主键。

  • 通常,如果 Supabase 方面出现错误,他们往往会通过回复消息告诉您发生了什么情况。日志中是否有您忘记发布的内容?

© www.soinside.com 2019 - 2024. All rights reserved.