如何让discord bot适应其他服务器?

时间:2021-01-12 08:50:26

标签: python python-3.x postgresql discord

对于我的不和谐机器人,我已经硬编码了 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)

1 个答案:

答案 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

这个代码示例已经假设您已经使用创建的表设置了数据库,但是只要有一点知识,您应该能够很好地修改它。