首页 > 解决方案 > 我想制作每个服务器频道

问题描述

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

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' object has no attribute 'send'

标签: pythonjsondiscord.py

解决方案


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


推荐阅读