Ответы пользователя по тегу Discord
  • Как сделать анти флуд по комманде пример: !antispam on / off?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    Для создания анти-спама в Discord боте на Python можно использовать следующий код:

    import discord
    from discord.ext import commands
    
    bot = commands.Bot(command_prefix='!')
    
    # Создаем словарь для хранения количества сообщений пользователя
    message_count = {}
    
    # Задаем лимит сообщений за определенный промежуток времени
    SPAM_LIMIT = 5
    SPAM_TIME = 10
    
    @bot.event
    async def on_message(message):
        # Проверяем, что сообщение отправлено в текстовый канал
        if isinstance(message.channel, discord.TextChannel):
            # Проверяем, что отправитель не является ботом
            if not message.author.bot:
                # Проверяем, что отправитель не находится в списке администраторов
                if message.author not in bot.get_guild(message.guild.id).get_role(ADMIN_ROLE_ID).members:
                    # Получаем количество сообщений пользователя за последний SPAM_TIME секунд
                    if message.author.id in message_count:
                        message_count[message.author.id] += 1
                    else:
                        message_count[message.author.id] = 1
                    
                    # Если количество сообщений превышает SPAM_LIMIT, то удаляем сообщение и отправляем предупреждение
                    if message_count[message.author.id] > SPAM_LIMIT:
                        await message.delete()
                        await message.author.send(f'Вы были заблокированы на {SPAM_TIME} секунд за спам')
                        await message.author.add_roles(bot.get_guild(message.guild.id).get_role(MUTED_ROLE_ID))
                        await asyncio.sleep(SPAM_TIME)
                        await message.author.remove_roles(bot.get_guild(message.guild.id).get_role(MUTED_ROLE_ID))
                        message_count[message.author.id] = 0
    
        await bot.process_commands(message)


    В этом коде мы создаем словарь message_count, который хранит количество сообщений каждого пользователя. Затем мы задаем лимит сообщений за определенный промежуток времени (5 сообщений за 10 секунд). В функции on_message мы проверяем, что сообщение отправлено в текстовый канал, что отправитель не является ботом и не находится в списке администраторов. Затем мы получаем количество сообщений пользователя за последний промежуток времени и если оно превышает лимит, то удаляем сообщение, отправляем предупреждение и блокируем пользователя на SPAM_TIME секунд. После этого мы удаляем блокировку и сбрасываем количество сообщений пользователя до 0.

    Обратите внимание, что для работы этого кода необходимо задать значения для констант ADMIN_ROLE_ID и MUTED_ROLE_ID, которые соответствуют ID ролей администратора и заблокированного пользователя на вашем сервере Discord.
    Ответ написан
  • При попытке отправить сообщение от имени вебхука возвращает очень большую ошибку, что делать?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    @bot.event
    async def on_message(msg):
    for webhook in await msg.channel.webhooks():
            if webhook.user == bot.user:
                if msg.content.startswith(webhook.name):
                    url = None
                    try:
                        url = Memory.read(f"avatars/{msg.channel.id}{webhook.name}webhook.txt")
                    except disnake.errors.HTTPException:
                        await webhook.send(content="Слишком много запросов отправлено! Пожалуйста подождите...")
                    except:
                        await webhook.send(content = msg.content[len(webhook.name) + 1:])
                        await msg.delete()
                    else:
                        await webhook.send(content = msg.content[len(webhook.name) + 1:], avatar_url=url)
                        await msg.delete()


    желательно: переменную webhook изменить на channel
    Ответ написан
  • Бот отвечает два раза на нажатие кнопки?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    Потому, что у вас 2 слушателя на кнопку. При нажатии на любую кнопку будет вызываться слушатель: on_button_click_one(). Решение: Добавьте в первый слушатель проверка на custom_id('verif_button') или label('Прохождение верификации') кнопки, чтобы начать проверку.
    Ответ написан
  • Discord.py Как сделать команду Feedback??

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    @bot.command()
    async def feedback(ctx, message:str, user_id:int=None):
       if user_id is None:
          author = bot.get_user(your_id)
          await author.send(f"Вам отправили сообщение: {message}\nАвтор: {ctx.author} | {ctx.author.id}")
       else:
           user = bot.get_user(user_id)
           await user.send(f"Вам отправили сообщение: {message}")

    Нужно уметь думать..
    Ответ написан
    Комментировать
  • Как отправить несколько embed в одном сообщении?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    Эти сообщения отправлены в одну минуты, а если сообщения отправлены от одного пользователя и в одинаковые минуты, то дискорд группирует сообщение в одно целое!
    Ответ написан
    1 комментарий
  • Как вписать в дискорд бота команду по выдаче роли с удалением предыдущих ролей?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    Специально для Вас и для опыта писал данный код:

    import discord
    import json
    import asyncio
    
    from discord.ext import commands
    
    @client.event
    async def on_ready():
    	with open("test.json", 'r') as f:
    		data = json.load(f)
    		for i in range(len(data)):
    			member = await (await client.fetch_guild(data[i]["guild_id"])).fetch_member(data[i]["id"])
    			client.loop.create_task(pun_start(member))
    	print("ready")
    
    def check_user_db(user_id:int):
    	with open('test.json', 'r') as f:
    		data = json.load(f)
    		for i in range(len(data)):
    			if data[i]["id"] == user_id: return True
    	return False
    
    def add_user_db(user_id:int, guild_id:int, author:str, timeout:int, reason:str, roles:list, role_pun:int):
    	if check_user_db(user_id) is True: return False
    	else:
    		with open('test.json', 'r') as f:
    			data = json.load(f)
    
    		new_user = {
    		"id": user_id,
    		"guild_id": guild_id,
    		"author": f"{author.name}#{author.discriminator}",
    		"timeout": timeout,
    		"reason": reason,
    		"roles": roles,
    		"role_pun": role_pun
    		}
    		data.append(new_user)
    
    		with open('test.json', 'w') as f:
    			json.dump(data, f, indent=3)
    
    		return True
    
    def remove_user_db(user_id:int):
    	if check_user_db(user_id) is False: return False
    	else:
    		with open('test.json', 'r') as f:
    			data = json.load(f)
    			for i in range(len(data)):
    				if data[i]["id"] == user_id:
    					del data[i]
    					with open('test.json', 'w') as f:
    						json.dump(data, f)
    					return True
    		return False
    
    async def pun_start(user):
    	with open('test.json', 'r') as f:
    		data = json.load(f)
    		user_data = {}
    		for i in range(len(data)):
    			if data[i]["id"] == user.id: user_data = data[i]; break
    		role_pun = discord.utils.get(user.guild.roles, id=id_роли) # роль для наказания
    		old_roles = user_data["roles"] # старые роли участника
    		await asyncio.sleep(user_data["timeout"])
    		await user.remove_roles(role_pun)
    		for role in old_roles:
    			role_user = discord.utils.get(user.guild.roles, id=role)
    			await user.add_roles(role_user)
    		remove_user_db(user.id)
    
    
    
    @client.command()
    async def pun(ctx, member:discord.Member=None, timeout:int=None, reason:str="Не указано"):
    	if member is None or timeout is None:
    		await ctx.reply("Укажите участника и время.\nПример: !pun @участник 100 - наказываем участника на 100сек.\n**Важно:** Время указывается в секундах!")
    	elif check_user_db(member.id) is True:
    		await ctx.reply("Участника уже наказан!")
    	else:
    		role_pun = discord.utils.get(ctx.guild.roles, id=id_роли) # роль для наказания
    		old_roles = [] # старые роли участника
    		for role in member.roles:
    			if role.name != "@everyone":
    				old_roles.append(role.id)
    				await member.remove_roles(role)
    		await member.add_roles(role_pun)
    		add_user_db(member.id, ctx.guild.id, ctx.author, timeout, reason, list(old_roles), role_pun.id) # добавляем участника в файл
    		await ctx.send(f"{member.mention}, наказан!\nПричина: {reason}")
    		await asyncio.sleep(timeout)
    		await member.remove_roles(role_pun)
    		for role in old_roles:
    			role_user = discord.utils.get(ctx.guild.roles, id=role)
    			await member.add_roles(role_user)
    		remove_user_db(member.id)
    		await ctx.send(f"Наказания с {member.mention} снято!\nПричина: Автоматическое снятие")


    Если будут ошибки пишите Xpeawey#5262
    Ответ написан
  • Как заставить discord бота считывать данные с отправленного сообщения?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    @client.event
    async def on_message(message):
    	def check(m):
    		return m.author == ctx.author and m.channel == ctx.channel # Принимаем данные только пользователя который написал 'Func'
    	if message.author == client.user:
    		return
    	if message.channel.startswith("Func")
    		await message.channel.send("Введите имя")
    		data1 = await client.wait_for('message', check=check, timeout=60) # timeout=60 - в течении 60 сек. мы будем принимать сообщения
    		await message.channel.send("Введите пароль")                      # ВАЖНО: Мы принимаем ОДНО сообщение.
    		data2 = await client.wait_for('message', check=check, timeout=60)
    
    		# или бесконечно принимать данные
    		await message.channel.send("Введите данные")
    		while True:
    			data = await client.wait_for('message', check=check) # Так мы будем бесконечно принимать сообщения.
    Ответ написан
    Комментировать
  • Как работать с когами discord.py discord_components?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    Здраствуйте вы не правильно отправляете embed с components

    Вот правильно:

    emb = discord.Embed(title='Ивенты', description=f'Выберите ивент который хотите провести.', 
      components=[
                    Button(style=ButtonStyle.gray, label='CodeNames', emoji=''),
                    Button(style=ButtonStyle.gray, label='Бункер', emoji=''),
                    Button(style=ButtonStyle.gray, label='Дурак Онлайн', emoji=''),
                    Button(style=ButtonStyle.gray, label='Шляпа', emoji=''),
                    Button(style=ButtonStyle.gray, label='Сломанный телефон', emoji='')
                ])
            emb.set_thumbnail(url=ctx.author.avatar_url)
            msg = await ctx.send(embed = emb)
    Ответ написан
  • Dislash.py вылазит ошибка, что делать?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    вот код:

    async def play(ctx, inter):
     inter.send('текст')
    Ответ написан
  • Ошибка в кода бота дискорда. Как сделать нормально?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    Команда help уже есть вот код замените его на ваш:

    client = commands.Bot( command_prefix = PREFIX )
    client.remove_command('help')

    вот команда help лучше:

    @client.command( pass_context = True )
    
    async def help( ctx ):
        ebm = discord.Embed( title = 'Все наши команды' )
    
        emb.add_field( name = f'{ PREFIX }help',  value = 'Помощь по командам' )
        emb.add_field( name = f'{ PREFIX }helpme', value = 'Помощь по командам в личку' )
        emb.add_field( name = f'{ PREFIX }clear', value = 'очистка чата (только для админов)' )
        emb.add_field( name = f'{ PREFIX }kick', value = 'кикнуть юзера (только для админов)' )
        emb.add_field( name = f'{ PREFIX }ban', value = 'забанить юзера (только для админов)' )
    
        await ctx.send( embed = emb )


    напишите мне в дискорд я вам много чего покажу: Xpeawey#6098
    Ответ написан
    Комментировать
  • Как сделать, чтобы бот, принимал сообщение от пользователя и отправлял от своего имени?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    Бот принимает команду say!
    Использование: [префикс]say [сообщение]

    КОД:
    @client.command()
    @commands.has_permissions(view_audit_log = True) #права команды: Просматривать аудит логи
    async def say(ctx, *, arg = None):
        emb = discord.Embed(description = f'{arg}', color = 0x0944d9) #цвет синий
    
        await ctx.send(embed = emb) #отправка сообщения
    
    @say.error #если у участника нету прав просматривать аудит лог то пишем ему то что у вас не достаточно прав!
    async def say_error(ctx, error):
        if isinstance(error, commands.MissingPermissions):
            emb = discord.Embed(titile = f'Ошибка', description = f'**У вас недостаточно прав!**', color = RED)
            emb.set_footer(text = f'{client.user.name} © 2020 | Все права защищены', icon_url = client.user.avatar_url)
            await ctx.send(embed = emb, delete_after = 15)
    Ответ написан