对于我的不和谐机器人,我已经硬编码了 member_leave 和 member_join 的频道 ID。如果我想发出一个命令使其适应其他服务器,例如当他们执行 -create_join 时,它将在该频道中创建一个 member_join,我可以从哪里获得有关此的更多信息?
我知道我要求太多了,但请给我一个例子来说明如何做到这一点?很多人推荐我使用 postgresql。 代码:
WELCOME_ID = 788460126368825355
LEAVE_ID = 788460140986761227
@client.event
async def on_member_join(member):
channel = client.get_channel(WELCOME_ID)
embed = discord.Embed(
colour = 0x99e68b,
title ='ยินดีต้อนรับเข้าสู่ smilewin !',
description = 'กรุณาอ่านกฏเเละเคารพกันเเละกันด้วยนะครับ'
)
embed.set_thumbnail(url=f"{member.avatar_url}")
embed.set_author(name=f"{member.name}", icon_url=f"{member.avatar_url}")
embed.set_footer(text=f"{member.guild}", icon_url=f"{member.guild.icon_url}")
embed.timestamp = datetime.datetime.utcnow()
embed.set_footer(text='┗Powered by REACT')
print(f"{member.name} have joined the server {member.guild.name}")
if member.guild.id == PERSONAL_GUILD_ID:
await channel.send(embed=embed)
@client.event
async def on_member_remove(member):
channel = client.get_channel(LEAVE_ID)
embed = discord.Embed(
colour=0x983925,
title = "Member leave",
description= f"{member.name}ได้ออกจากเซิฟเวอร์"
)
embed.set_thumbnail(url=f"{member.avatar_url}")
embed.set_author(name=f"{member.name}", icon_url=f"{member.avatar_url}")
embed.set_footer(text=f"{member.guild}", icon_url=f"{member.guild.icon_url}")
embed.timestamp = datetime.datetime.utcnow()
embed.set_footer(text='┗Powered by REACT')
print(f"{member.name} have left the server {member.guild.name}")
if member.guild.id == PERSONAL_GUILD_ID:
await channel.send(embed=embed)
答案 0 :(得分:1)
最后你想要的是一个数据库来存储这些 channel_id 值。这样做的一种方法是 JSON 作为另一个建议的答案,但如果您想添加您的机器人并在许多服务器中使用此功能,最好是使用像 SQL 这样的真实数据库。
考虑到 discord.py 使用异步接口,最好的启动库是 aiosqlite(访问 https://github.com/omnilib/aiosqlite)。
将这些 channel_id 存储在数据库中的简单 Python 代码如下所示:
param(
$exampleFileName = "d:\tmp\file.txt",
$pattern = "ASGonline-sys-system1-asg"
)
$PSVersionTable.PSVersion
@"
TAGS Name ASGonline-sys-system1-asg
TAGS aws:autoscaling:groupName ASGonline-sys-system1-asg20210107040213164400000001
"@ | Out-File $exampleFileName
$fileContent = Get-Content $exampleFileName -Raw
([regex]::Matches($fileContent, $pattern))[0].Value
这个代码示例已经假设您已经使用创建的表设置了数据库,但是只要有一点知识,您应该能够很好地修改它。