【问题标题】:I want to make per server channels我想制作每个服务器频道
【发布时间】:2021-10-28 01:31:51
【问题描述】:

“每台服务器”的意思是频道绑定到服务器 这是我制作的代码:

def get_channel(client,message):
    with open('channels.json', 'r') as f:
        channels = json.load(f)
    return channels[str(message.guild.id)]

@client.event
async def on_guild_join(guild):
    with open('channels.json', 'r') as f:
        channels = json.load(f)
    channels[str(guild.id)] = ''
    with open('channels.json', 'w') as f:
        json.dump(channels,f)

@client.command()
async def cc(ctx, prefix):
    guild = ctx.guild
    with open('channels.json', 'r') as f:
        channels = json.load(f)
    channels[str(guild.id)] = prefix
    with open('channels.json', 'w') as f:
        json.dump(channels,f)
    await ctx.send('done')

这是我将函数放入的代码

@client.event
async def on_member_join(member):
    channel = discord.utils.get(member.guild.channels, name=get_channel)
    await channel.send(f'Welcome {member.mention}')

数据库中的文字是正确的 我得到的错误: await channel.send(f'Welcome {member.mention}') AttributeError: 'NoneType' 对象没有属性 'send'

【问题讨论】:

  • 假设这是关于 discord.py 并相应地标记。如果我错了,请编辑。
  • 是的,它是关于 discord.py

标签: python json discord.py


【解决方案1】:
def get_channel(guild):
    with open('channels.json', 'r') as f:
        channels = json.load(f)
    return channels[str(guild.id)]

@client.event
async def on_guild_join(guild):
    with open('channels.json', 'r') as f:
        channels = json.load(f)
    channels[str(guild.id)] = ''
    with open('channels.json', 'w') as f:
        json.dump(channels,f)

@client.command()
async def channel_define(ctx, channel_name):
    guild = ctx.guild
    with open('channels.json', 'r') as f:
        channels = json.load(f)
    channels[str(guild.id)] = channel_name
    with open('channels.json', 'w') as f:
        json.dump(channels,f)
    await ctx.send('done')

@client.event
async def on_member_join(member):
    channel = discord.utils.get(member.guild.channels, name=get_channel(member.guild))
    await channel.send(f'Welcome {member.mention}')

这是代码的更正版本。但我建议您注册频道 ID 而不是名称。

如果你想使用带id的get方法,参考文档:https://discordpy.readthedocs.io/en/stable/api.html#discord.utils.get

【讨论】:

  • 没办法让你这么多
  • 我真的不想问这个,但是你怎么把它变成一个有id的方法?
  • 在channel_define 中,您将channel_name 选项替换为channel_id(并为其指定频道ID 而不是其名称)。然后,在discord.utils.get 中,将name=func() 替换为id=func()。
  • 它并没有真正起作用
  • 能否请您发送带有id方法的代码
【解决方案2】:
channel = discord.utils.get(member.guild.channels, name='get_channel')

在这一行中,您在成员加入的公会的频道中搜索一个频道,该频道的名称为“get_channel”。但是 get 函数没有找到任何东西,所以它返回 None。该频道不存在,或者没有为该公会加载缓存。

加载公会缓存:

await guild.chunk()

【讨论】:

  • 我必须把'await guild.chunk()'放在哪里?
  • 注意:我更改了欢迎码
  • 注意:我忘记了一些东西,我添加了它
  • 在你的发泄开头,你可以写:if not guild.chunked: await guild.chunk() 但是你确定问题不是你要找的房间的名字吗?
  • 你能看看我的新代码 bcs 公会分块不起作用
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2019-11-16
  • 2020-06-15
  • 2021-10-11
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
相关资源
最近更新 更多