How to make a Discord slash command usuable in DMs

Viewed 21

I want to use a slash command in DMs. Take this simple test.py file in the folder cogs/.

import discord
from discord.ext import commands
from discord import app_commands

class Test(commands.Cog):
    def __init__(self, bot: commands.Bot) -> None:
        self.bot = bot

  @commands.Cog.listener()
    async def on_ready(self):
        print("Loaded test command cog.")

  @app_commands.command(name="test", description="Test command")
  async def test(self, interaction: discord.Interaction):
    await interaction.response.send_message(f'Hello')

async def setup(bot: commands.Bot) -> None:
    await bot.add_cog(Test(bot))

Outside the cogs folder is my launch_bot.py file which start the bot:

import discord
from discord.ext import commands
import json

with open("cogs/jsons/settings.json") as json_file:
    data_dict = json.load(json_file)
    guild_id = data_dict["guild_id"]

class MyBot(commands.Bot):
    
    def __init__(self) -> None:
        super().__init__(
            command_prefix = "kt$", 
            intents = discord.Intents.all(),
            tree_cls=CustomCommandTree)
        
    async def setup_hook(self) -> None:
        for filename in os.listdir("./cogs"):
            if filename.endswith(".py"):
                await self.load_extension(f"cogs.{filename[:-3]}")
        await bot.tree.sync(guild=discord.Object(id=guild_id))
        
    async def on_ready(self):
        application_info = await self.application_info()
        bot_owner = application_info.owner
        await bot_owner.create_dm()
        self.bot_owner_dm_channel = bot_owner.dm_channel
        
        await self.change_presence(activity=discord.Game(presence_message))
        
        print(f"Logged in as\n\tName: {self.user.name}\n\tID: {self.user.id}")
        print(f"Running pycord version: {discord.__version__}")
        print(f"Synced commands to guild with id {guild_id}.")

bot = MyBot()
bot.run(bot_token)

I tried following the instructions which were described in link but I have no guild specified, so this doesn't work. The docs says it should work but it doesn't for me any ideas?

0 Answers
Related