Galaxy_Shots
Galaxy_Shots

Reputation: 15

How to make a set logging channel command

Im trying to make a public bot, and i would want this ticket system witha logging channel it already has a logging channel but how can i modify this to make a command that sets the logging channel?

# --- Ticket Open ---
@client.command()
@commands.guild_only()
async def ticket(ctx):
    if ctx.channel.type != discord.ChannelType.private:
        channels = [str(channel) for channel in client.get_all_channels()]
        if f'ticket-{ctx.author.id}' in channels:
            await ctx.message.delete()
        else:
            ticket_channel = await ctx.guild.create_text_channel(f'ticket-{ctx.author.id}')
            await ticket_channel.set_permissions(ctx.guild.default_role, send_messages=False, read_messages=False)
            await ticket_channel.set_permissions(ctx.author, send_messages=True, read_messages=True, add_reactions=True, embed_links=True, attach_files=True, read_message_history=True, external_emojis=True)
            embed = discord.Embed(color=10181046, description=f'Please enter the reason for this ticket, type `-close` if you want to close this ticket.')
            embed.set_thumbnail(url='')
            await ticket_channel.send(f'{ctx.author.mention}', embed=embed)
            await ctx.message.delete()
            logchannel = await client.fetch_channel('850364625479532545')
        embed = discord.Embed(title="Ticket Created",
                                  description="",
                                  color=discord.Colour.green())
        embed.add_field(name=f'**By:** {ctx.author}',value= f'**ID:** {ctx.author.id}')
        await logchannel.send(embed=embed)

#--- Ticket Close ---
@client.command()
@commands.guild_only()
async def close(ctx):
    print(f'{ctx.author} | {ctx.author.id} -> {client.command_prefix}close')
    if ctx.channel.type != discord.ChannelType.private:
        admin_roles = [834126146215477348,835608325273157733,838859643224326144,835582821221138472,835914273402126376]
        if ctx.channel.name == f'ticket-{ctx.author.id}':
            await ctx.channel.delete()
        elif admin_roles and 'ticket' in ctx.channel.name or ctx.author.id in administrator_ids and 'ticket' in ctx.channel.name:
            await ctx.channel.delete()
        else:
            await ctx.message.delete()
        logchannel = await client.fetch_channel('850364625479532545')
        embed = discord.Embed(title="Ticket Closed",
                                  description="",
                                  color=discord.Colour.red())
        embed.add_field(name=f'**By:** {ctx.author}',value= f'**ID:** {ctx.author.id}')
        await logchannel.send(embed=embed)

Upvotes: 0

Views: 127

Answers (1)

Mio
Mio

Reputation: 161

Tip: if you want to create a public bot don't use handwritten channel id, you'd better save to file for all servers in json file and set it with command. For example this:

{
"server identifier": "system channel identifier",
...
}

I don't know what's wrong with the code.

Upvotes: 1

Related Questions