【问题标题】:Avoid restarting bot when creating server-global channel创建服务器全局通道时避免重新启动机器人
【发布时间】:2019-01-14 00:53:01
【问题描述】:

所以基本上我有这个简单的“世界聊天”脚本,让拥有我的机器人和一个名为“world_chat”的频道的人在该频道中相互聊天,他们可以接收和发送消息,但这里的问题是,每次他们使用我给出的命令或手动创建一个频道,他们将能够发送消息,其他人可以看到它,但他们将无法看到其他人发送的内容,直到我在 heroku 上重置机器人,我真的没有想要这样做,因为当机器人进入很多服务器时,它会做很多工作。

#This is the script that let's people chat to each other
saki_chans=[]
async def get_saki_chans():
    for i in client.servers:
        for x in i.channels:
            if x.type == discord.ChannelType.text and x.name == 
'world_chat' and x.id not in saki_chans:
                saki_chans.append(x.id)
    print(saki_chans)

@client.event
async def on_message(message):
    if message.server and message.channel.name == 'world_chat' and 
message.author.id != client.user.id:
        for i in saki_chans:
            if i == message.channel.id:
                pass
            else:
            
emb=discord.Embed(title='',description='{}'.format(message.content),colour 
= discord.Color.gold)
                emb.set_author(name= message.author.name)
                await client.send_message(discord.Object(id=i),embed=emb)

这是根据命令创建通道的脚本

@client.command(pass_context=True)
async def get_wchat(ctx):
    servr = ctx.message.server
    await client.create_channel(servr, 'world_chat', 
type=discord.ChannelType.text)

我希望当有人说“(前缀)create_wchat”时,它会创建一个名为“world_chat”的频道,但我不必重新启动机器人或脚本,让该人接收其他人发送的消息。

【问题讨论】:

    标签: python python-3.x discord.py


    【解决方案1】:

    您必须在您的 get_wchat 命令中调用 await get_saki_chans() 以在每次创建全局频道列表时更新您的全局频道列表。

    目前你只在启动时调用它一次,所以你必须重新启动你的机器人。

    但是,我建议您不要让用户调用特定命令,而是听on_channel_createon_channel_deleteon_channel_update 事件,因此只需创建一个名为#world_chat 的频道,或将现有频道重命名为此姓名 ;使其成为 world_chat 频道。

    同样,您可以避免保留不再命名为 #world_chat 或删除的频道。

    【讨论】:

    • 这仅适用于脚本,但如果手动创建频道,则它将不起作用。
    • @Unknown 这就是“但是”部分的内容
    • @Unknown Unsing 事件,您可以在创建频道时检查其名称是否为“world_chat”(现在会说“wc”),如果是,则将其添加到列表中。 ;每当删除频道时,如果其名称为“wc”,则将其从列表中删除;并且每当更新频道时,如果其名称变为“wc”,则将其添加到列表中;如果它的名字是 'wc' 并且改变了从列表中删除它。
    • 这会处理每个频道,当频道不再是 world_chat 时也会处理。
    猜你喜欢
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多