创建服务器全局通道时避免重启机器人

时间:2019-01-13 13:31:31

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

因此,基本上我有一个简单的“世界聊天”脚本,该脚本使拥有我的漫游器和名为“ 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)

我希望当有人说'(prefix)create_wchat'时,它会创建一个名为'world_chat'的频道,但是我不必重启机器人或脚本来使该人接收别人发送的消息。

1 个答案:

答案 0 :(得分:0)

每次创建一个全局频道列表时,您都必须在await get_saki_chans()命令中调用get_wchat

当前,您在启动时只调用一次,因此这就是为什么您必须重新启动机器人的原因。

但是,建议您不要监听on_channel_createon_channel_deleteon_channel_update事件,而是建议创建一个名为#world_chat的频道,而不是要求用户调用特定命令。 ,或将现有名称重命名为该名称;使其成为world_chat频道。

类似地,您将避免保留不再命名为#world_chat或已删除的频道。