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

Python / disnake | Вопрос насчёт "await ctx.send"

D1kUsha Мастер (1202), открыт 2 недели назад
 class Viberi(disnake.ui.View): 
def __init__(self):
super().__init__(timeout=10.0)
self.value = Optional[bool]

@disnake.ui.button(label="Делать", style=disnake.ButtonStyle.green)
async def prinyal(self, button: disnake.ui.Button, inter: disnake.CommandInteraction):
await inter.send("Вы сделали.")
self.value = True
self.stop()
@disnake.ui.button(label="Не делать", style=disnake.ButtonStyle.red)
async def otkazal(self, button: disnake.ui.Button, inter: disnake.CommandInteraction):
await inter.send("Вы отказались делать.")
self.value = False
self.stop()
@bot.command(name="delat")
async def ask_delat(ctx, member: disnake.Member):
member = member
view = Viberi()
await ctx.send(f"{ctx.message.author.mention} предложил делать {member.mention}, {member.mention} Вы согласны?", view=view)
await view.wait()

if view.value == True:
await ctx.send("Кек)))")
elif view.value == False:
await ctx.send("Анлак(((")
else:
await ctx.send("Нет ответа")
Из-за какой то ошибки в коде, эта строка:

 await ctx.send(f"{ctx.message.author.mention} предложил делать {member.mention}, {member.mention} Вы согласны?", view=view)  
выполняется три раза и в чат дискорда пишет 3 раза одно и тоже, когда нужно только одно сообщение.
Помогите исправить проблему.
1 ответ
Chudo_Chudnoe Мастер (1998) 2 недели назад
Привет!

ПОпробуй так:

 import disnake 
from disnake.ext import commands

bot = commands.Bot(command_prefix='!')

class Viberi(disnake.ui.View):
def __init__(self):
super().__init__(timeout=10.0)
self.value = None

@disnake.ui.button(label="Делать", style=disnake.ButtonStyle.green)
async def prinyal(self, button: disnake.ui.Button, inter: disnake.CommandInteraction):
await inter.send("Вы сделали.")
self.value = True
self.stop()

@disnake.ui.button(label="Не делать", style=disnake.ButtonStyle.red)
async def otkazal(self, button: disnake.ui.Button, inter: disnake.CommandInteraction):
await inter.send("Вы отказались делать.")
self.value = False
self.stop()

@bot.command(name="delat")
async def ask_delat(ctx, member: disnake.Member):
print("Команда вызвана") # Отладка
view = Viberi()
await ctx.send(f"{ctx.message.author.mention} предложил делать {member.mention}, {member.mention} Вы согласны?", view=view)
await view.wait()

if view.value == True:
await ctx.send("Кек)))")
elif view.value == False:
await ctx.send("Анлак(((")
else:
await ctx.send("Нет ответа")

bot.run('твой_токен_бота')
Если не поможет, то скорее всего есть конфликт с другими частями твоего кода
D1kUshaМастер (1202) 2 недели назад
Привет, всё также... С чем может быть связана проблема? Могу тебе попробовать скинуть весь код, если нужно.
Chudo_Chudnoe Мастер (1998) D1kUsha, ну да, лучше так сделать, по всему коду будет ясно что не так
Chudo_ChudnoeМастер (1998) 2 недели назад
 class Viberi(disnake.ui.View):   
def __init__(self, target_user):
super().__init__(timeout=10.0)
self.value = None
self.target_user = target_user

@disnake.ui.button(label="Делать", style=disnake.ButtonStyle.green)
async def prinyal(self, button: disnake.ui.Button, inter: disnake.CommandInteraction):
if inter.user != self.target_user:
await inter.send("Вы не можете нажать эту кнопку.", ephemeral=True)
return
await inter.send("Вы сделали.")
self.value = True
self.stop()
Chudo_Chudnoe Мастер (1998)
 @disnake.ui.button(label="Не делать", style=disnake.ButtonStyle.red)    
    async def otkazal(self, button: disnake.ui.Button, inter: disnake.CommandInteraction):    
        if inter.user != self.target_user:  
            await inter.send("Вы не можете нажать эту кнопку.", ephemeral=True)  
            return  
        await inter.send("Вы отказались делать.")    
        self.value = False    
        self.stop()    
Chudo_ChudnoeМастер (1998) 2 недели назад
 @bot.command(name="delat")     
async def ask_delat(ctx, member: disnake.Member):
print("Команда вызвана") # Отладочное сообщение
view = Viberi(target_user=member)
await ctx.send(f"{ctx.message.author.mention} предложил делать {member.mention}, {member.mention} Вы согласны?", view=view)
await view.wait()

if view.value == True:
await ctx.send("Кек)))")
elif view.value == False:
await ctx.send("Анлак(((")
else:
await ctx.send("Нет ответа")
Chudo_ChudnoeМастер (1998) 2 недели назад
Вот их протестируй, ну в общем я на связи, пиши если что)
А сейчас, добрый тебе снов. я спать)
D1kUsha Мастер (1202) Chudo_Chudnoe, Отлично! Всё работает, спасибо Вам. Вдруг что, напишу
Похожие вопросы