我正在创建一个不和谐的机器人,它将用户数据从服务器输入到数据库中,例如 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()
这不起作用可能有多种原因。乍一看,这不像是代码问题。
首先(也是最有可能的)我会检查 RLS 策略(启用行级安全性 (RLS))并查看它们是否正确设置(您应该能够读取/写入要对其进行操作的表)
另一个原因可能是您保存的字段格式不正确(例如 ID 设置为 INT(8) 并且您在其中保存字符串)
另一个原因可能是您尝试写入的字段已经传播,或者它们是其他表约束的一部分,例如另一个没有该条目的表上的主键。
通常,如果 Supabase 方面出现错误,他们往往会通过回复消息告诉您发生了什么情况。日志中是否有您忘记发布的内容?