• Discord.py одноразовость команды?

    Taruu
    @Taruu
    Шкодер на Python, и немного на C/С++ lua...
    Можно создать роль при заходе на сервер при помощи эвента on_guild_join и уже при заходе на сервер бот сам сделает свою роль (нужна защита от лимита ролей на сервере)
    Так же если есть база данных то просто заносить данные об настройке на данном сервере.
    Так же можно использовать декоратор для проверки. Есть ли роль на сервере. (Сверять на название роли)
    Пример из документации:
    async def is_owner(ctx):
        return ctx.author.id == 316026178463072268
    
    @bot.command(name='eval')
    @commands.check(is_owner)
    async def _eval(ctx, *, code):
        """A bad example of an eval command"""
        await ctx.send(eval(code))
    Ответ написан
    Комментировать
  • (Discord.py) Как получить информацию из сообщений в определенном канале на сервере Discord с помощью бота?

    Taruu
    @Taruu
    Шкодер на Python, и немного на C/С++ lua...
    Сначала нужно получить при помощи get_channel сам канал.
    Затем при его помощи fetch_message получить сам объект сообщения
    channel = await bot.get_channel(id чата)
    message = await channel.fetch_message(id сообщения)
    Ответ написан
    1 комментарий
  • Как исправить эту ошибку при запуске дискорд бота?

    Taruu
    @Taruu
    Шкодер на Python, и немного на C/С++ lua...
    import discord
    from discord.ext import commands
    
    import sqlite3
    
    client = commands.Bot(command_prefix = "!")
    client.remove_command('help')
    connection = sqlite3.connect('users.db')
    cursor = connection.cursor()
    
    
    @client.event
    async def on_ready():
      cursor.execute("""CREATE TABLE users (name TEXT,id INT,cash BIGINT,rep INT,lvl INT)""")
    
      for guild in client.guilds:
        for member in guild.members:
          if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
            cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
          else:
            pass
    
      connection.commit()
      print('bot connected')
    
    
    @client.event
    async def on_member_join(member):
      if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
        cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
        connection.commit()
      else:
        pass
    
    
    @client.command(aliases = ['balance', 'cash'])
    async def __balance(ctx, member: discord.Member = None):
      if member is None:
        await ctx.send(embed = discord.embed(
          description = f"""Баланс пользователя {ctx.author} составляет **{cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id).fetchone()[0])}**"""
        ))
      else:
        await ctx.send(embed = discord.embed(
          description = f"""Баланс пользователя {member} составляет **{cursor.execute("SELECT cash FROM users WHERE id = {}".format(member.id).fetchone()[0])}**"""
        ))
    
    
    client.run()
    Ответ написан
    Комментировать
  • Где и как учить python и discord.py?

    Taruu
    @Taruu
    Шкодер на Python, и немного на C/С++ lua...
    Лично я начинал сам с discord.py и получил много опыта и шишек...
    Учил один и все с нуля. был мелкий опыт с питоном но а так я прошел все шишки разработки бота.
    Советую ЧИТАТЬ ДОКИ на discord.py и гуглить на англ. Так же советую вкурить хотя бы концепцию ООП и асинхронного программирования (привет global). Если очень плохо все идет то стоит взять совета у тех кто пишет. Или в англ секторе или в русском. Ну так же стоит понимать что чаще всего все ошибки которые вы встретите не ошибки а не знание либы или ее реализаций.
    P.S все это за месяц но я сидел по 24/7
    Ответ написан
    4 комментария
  • Discord.py Как вывести переменную в одной команде с другой?

    Taruu
    @Taruu
    Шкодер на Python, и немного на C/С++ lua...
    В данном случае нужно использовать Class
    class MyClass:
        @client.command()
        async def _init_(sefl,ctx):
            self.moder = None
            embed = discord.Embed(
                title='Это мой заголовок',
                description='Это мой основной текст',
                color=0x83c837)
            self.moder = await ctx.send(embed=embed)
    
        @client.command()
        async def test(sefl,ctx):
            await ctx.send(
                self.moder
            )

    Очень советую посмотреть что такое асинхронное программирование и почему там явно не место global переменным :/
    Ответ написан
    Комментировать
  • Как узнать в каком голосовом канале находится пользователь, написавший команду?

    Taruu
    @Taruu
    Шкодер на Python, и немного на C/С++ lua...
    @bot.command()
    async def bb(ctx):
        channel = ctx.message.author.voice.channel
        if not channel:
            await ctx.send("You are not connected to a voice channel")
            return
    Ответ написан
    1 комментарий
  • Discord.py можно ли сделать одноразовую команду?

    Taruu
    @Taruu
    Шкодер на Python, и немного на C/С++ lua...
    Самый лучший вариант это просто проверить есть ли такая роль просто проверев все роли на сервере:
    async def findRoleByName(guild,name:str):
        for role in guild.roles:
            if name.lower() in role.name.lower():
                return role #вернет сам объект роли
        else:
            return None

    И если мы получили роль то мы ее используем... Если нет то создаем и все :*
    Ответ написан
    1 комментарий