Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с кодом! У меня не получается сделать список каналов discord-py со слэш коммандами pycord

g a Знаток (322), закрыт 3 недели назад
Мне нужен список каналов, чтобы юзер выбрал канал, в который ему нужно было чтобы отправлялось сообщение
код:

 import discord 
from discord.ext import commands, tasks
from discord import Option
import colorama
import json
import requests

token = 'токентут'
bot = commands.Bot(command_prefix = '/', intents=discord.Intents.all())



text_channel_list = []

async def chs():
for guild in bot.guilds:
for channel in guild.text_channels:
text_channel_list.append(channel)

@bot.slash_command(name="setwelcome")
async def setwelcome(ctx, ch: Option(description = 'ID канала, в который будут присылаться приветственные сообщения', required = True), message: Option(str, description = 'Сообщение, которое будет присылаться в данный канал({member.name} - зашедший человек)', required = True)):
await ctx.delete()
channel = bot.get_channel(int(ch))
await ch.send(message)
pass





bot.run(token)
Лучший ответ
Татьяна Просветленный (32581) 3 недели назад
 import os 
import discord
from discord.ext import commands
from discord import app_commands
from discord.ui import Select, View

token = os.getenv("DISCORD_TOKEN")
bot = commands.Bot(command_prefix='/', intents=discord.Intents.all())


class ChannelSelect(Select):
def __init__(self, channels, message):
options = [
discord.SelectOption(label=channel.name, value=str(channel.id))
for channel in channels
]
super().__init__(placeholder="Выберите канал...",
min_values=1, max_values=1, options=options)
self.message = message

async def callback(self, interaction: discord.Interaction):
channel_id = int(self.values[0])
channel = bot.get_channel(channel_id)
if channel:
await channel.send(self.message)
await interaction.response.send_message(f"Сообщение отправлено в {channel.mention}", ephemeral=True)
else:
await interaction.response.send_message("Канал не найден.", ephemeral=True)


@bot.tree.command(name="setwelcome")
@app_commands.describe(message="Сообщение, которое будет присылаться в данный канал({member.name} - зашедший человек)")
async def setwelcome(interaction: discord.Interaction, message: str):
guild = interaction.guild
text_channels = guild.text_channels

view = View()
view.add_item(ChannelSelect(text_channels, message))

await interaction.response.send_message("Выберите канал для отправки сообщения:", view=view, ephemeral=True)


@bot.event
async def on_ready():
await bot.tree.sync()
print(f'Мы вошли как {bot.user}')

bot.run(token)

g aЗнаток (322) 3 недели назад
спасибо, щас попробую
Татьяна Просветленный (32581) я вижу у себя тоже сейчас проверила на моем аккаунте и подправлю
g aЗнаток (322) 3 недели назад
 discord.errors.ApplicationCommandInvokeError: Application Command raised an exception: TypeError: Messageable.send() got an unexpected keyword argument 'ephemeral' 
g aЗнаток (322) 3 недели назад
а если мне нужно так?

это возможно ?
ТатьянаПросветленный (32581) 3 недели назад
да и в коде еще там заменишь на свою папку только и еще в системе лучше публикуй свой токен чтобы можно выкладывать весь тогда
Татьяна Просветленный (32581) Татьяна, data = await self.request(Route('GET', '/users/@me')) будет ругать но тут должна быть твоя папка в дискорде
ТатьянаПросветленный (32581) 3 недели назад
 token = __import__('os').getenv("TOKEN")   
это будет считывать из системной переменной в твоей системе windows
ТатьянаПросветленный (32581) 3 недели назад
а тут нужно уже на свои в коде
 data = await self.request(Route('GET', и далее в кавычках твоя папка должна быть 
ТатьянаПросветленный (32581) 3 недели назад
и обязательно закрыть скобками
g aЗнаток (322) 3 недели назад
я просто не понимаю куда вставлять data = await self.request(Route('GET', '/users/@me'))
Татьяна Просветленный (32581) в коде уже все тут только в самом дискорд настроить у тебя чтобы отсылал тебе
Нариман ВелибековПрофи (687) 3 недели назад
зачем в переменных винды хранить убогий токен дискорда
g a Знаток (322) Нариман Велибеков, вообще мне нужно чтоб было так:
ТатьянаПросветленный (32581) 3 недели назад
тут либо нету прав либо бот не находит папки в дискорде уже
ТатьянаПросветленный (32581) 3 недели назад
в ответе поменяла код
Татьяна Просветленный (32581) Татьяна, у меня ошибок совсем уже нет с этим кодом
g aЗнаток (322) 3 недели назад
cannot import name 'AppCommandOptionType' from 'discord.enums' (c:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\discord\enums.py)
у меня есть((
Татьяна Просветленный (32581) g a, я изменила то код а ты менял потом еще в 3 раз и уже все пропало и у тебя должно как и в моем боте
g aЗнаток (322) 3 недели назад
 from discord import app_commands 
та же самая ошибка с этим
Татьяна Просветленный (32581) g a, это уже конфликт версий библиотек и я проверяла на python 3.12.3 версии
ТатьянаПросветленный (32581) 3 недели назад
при вызове команды pip list
ТатьянаПросветленный (32581) 3 недели назад
установи эту версию дискорд тогда
g aЗнаток (322) 3 недели назад
оке, щас попробую
g aЗнаток (322) 3 недели назад
спасибо огромное, помогли
Остальные ответы
крендель кренделиевчи naw Ученик (229) 3 недели назад
Щя набегут праграмисты кампутерщики
g aЗнаток (322) 3 недели назад
ага((
Похожие вопросы