Ответы пользователя по тегу Python
  • 'Bot' object has no attribute 'commit',как пофиксить это?

    Не видел в ботах такой функции. Но я такую видел в курсоре для БД вы наверное путаете вы наверное должны
    import discord
    import asyncio
    import aiosqlite
    import random
    from discord.ext import commands
    from discord_components import Button,Select,SelectOption,ComponentsBot
    
    import config
    
    #set prefix
    client = commands.Bot(command_prefix = "$")
    client.remove_command('help')
    
    #ready check
    @client.event
    async def on_ready():
      print('Bot logged in as {0.user}'.format(client))
      setattr(client, 'db', await aiosqlite.connect('level.db'))
      await asyncio.sleep(3)
      async with client.db.cursor() as cursor:
        await cursor.execute('CREATE TABLE IF NOT EXISTS levels (level INTEGER, xp INTEGER, user INTEGER, guild INTEGER)')
    
    
    @client.event
    async def on_message(message):
      if message.author.bot:
        return
      await client.process_commands(message)
      author = message.author
      guild = message.guild
      async with client.db.cursor() as cursor:
        await cursor.execute("SELECT xp FROM  levels WHERE user = ? AND guild = ?", (author.id, guild.id,))
        xp = await cursor.fetchone()
        await cursor.execute("SELECT xp FROM  levels WHERE user = ? AND guild = ?", (author.id, guild.id,))
        level = await cursor.fetchone()
    
        if not xp or not level:
          await cursor.execute("INSERT INTO levels (level, xp, user, guild) VALUES (?, ?, ?, ?)", (0, 0, author.id, guild.id,))
          await client.db.commit()
    
        try:
          xp =xp[0]
          level = level[0]
        except TypeError:
          xp = 0
          level = 0
    
        if level <5:
          xp += random.randint(1, 3)
          await cursor.execute("UPDATE levels SET xp = ? WHERE user = ? AND guild = ?", (xp, author.id, guild.id,))
        else:
          rand = random.randint(1, (level//4))
          if rand == 1:
            xp += random.randint(1, 3)
            await cursor.execute("UPDATE levels SET xp = ? WHERE user = ? AND guild = ?", (xp, author.id, guild.id,))
        if xp >= 100:
          level += 1
          await cursor.execute("UPDATE levels SET level = ? WHERE user = ? and guild = ?", (level, author.id, guild.id,))
          await cursor.execute("UPDATE levels SET xp = ? WHERE user = ? AND guild = ?", (0, author.id, guild.id,))
          await message.channel.send(f'{author.mention} has leveled up to level **{level}**!')
      await client.db.commit()
    
    @client.command(aliases = ['lvl', 'rank', 'r'])
    async def level(ctx, member: discord.Member = None):
      member = ctx.author
      async with client.db.cursor() as cursor:
        await cursor.execute("SELECT xp FROM  levels WHERE user = ? AND guild = ?", (member.id, ctx.guild.id,))
        xp = await cursor.fetchone()
        await cursor.execute("SELECT xp FROM  levels WHERE user = ? AND guild = ?", (member.id, ctx.guild.id,))
        level = await cursor.fetchone()
    
        if not xp or not level:
          await cursor.execute("INSERT INTO levels (level, xp, user, guild) VALUES (?, ?, ?, ?)", (0, 0, ctx.author.id, ctx.guild.id,))
          await client.db.commit()
    
        try:
          xp = xp[0]
          level = level[0]
        except TypeError:
          xp = 0
          level = 0
    
        em = discord.Embed(title = f"{member.name}'s level", description = f"level: {level}\nXP: {xp}")
        em.set_thumbnail(url = member.avatar_url)
        await ctx.send(embed = em)
    #help command
    @client.command()
    async def help(ctx):
      page1 = discord.Embed(title = 'Start Page.', 
        description = 
        'Bot prefix = `' + str(config.PREFIX) + '`\n'+ 
        'This is a start page, please select a category for more information!',
        color = discord.Color.green())
      page1.set_thumbnail(url = ctx.guild.icon_url)
    
      page2 = discord.Embed(title = 'Moderation Settings.', 
        description = 
        '**clear** `amount` - clears the chat to amount.\n' +
        '**mute** `user,time,reason` - disables access to all channels.\n' +
        '**unmute** `user` - enables access to all channels.\n' +
        '**kick** `user,reason` - kick a member from the server.\n' +
        '**ban** `user,reason` - ban a member from the server.\n' +
        '**unban** `user` - unban a member from the server.', 
        color = discord.Color.green())
      page2.set_thumbnail(url = ctx.guild.icon_url)
    
      emoji1 = client.get_emoji(973967340003815444)
      message = await ctx.send(components = [
        Select(
          placeholder = 'Select a category!',
          options = [
            SelectOption(
            	label = 'Moderation Settings',
            	emoji = emoji1,
            	description = 'Setting up server moderation.',
            	value = '1'
            )
          ],
          custom_id = 'HelpSelect'
        )
      ], embed = page1)
    
      while True:
        interaction = await client.wait_for('select_option', check = lambda inter: inter.custom_id == 'HelpSelect' and inter.user == ctx.author)
        value = interaction.values[0]
        if value == '1':
          await message.edit(embed = page2)
        else:
          print('Error')
    
    #clear command
    @client.command()
    @commands.has_permissions(administrator = True)
    async def clear(ctx, amount = 0):
      await ctx.channel.purge(limit  = amount + 1)
    
    #kick command
    @client.command()
    @commands.has_permissions(kick_members = True)
    async def kick(ctx, member:discord.Member, *, reason = None):
        if reason == None:
          reason = "None"
        await ctx.guild.kick(member)
        await ctx.send(f'{member.mention} has been kicked for {reason}.')
    
    #mute command
    @client.command()
    @commands.has_permissions(manage_messages = True)
    async def mute(ctx, member:discord.Member, time:str, *, reason = None):
      end_time = time[-1:]
      mutetime = int(time[:-1])
    
      muteembedserver = discord.Embed(title = 'Mute information.', color = discord.Color.red())
      muteembedserver.add_field(name = 'Moderator', value = ctx.author.mention, inline = True)
      muteembedserver.add_field(name = 'Muted user', value = member.mention, inline = True)
      muteembedserver.add_field(name = '⠀', value = '⠀', inline = True)
      muteembedserver.add_field(name = 'Reason', value = reason, inline = True)
      muteembedserver.add_field(name = 'Muted Time', value = time, inline = True)
      muteembedserver.add_field(name = '⠀', value = '⠀', inline = True)
    
      muteembedmember = discord.Embed(title = 'Mute information.', description = 'You were muted in the server ' + str(ctx.guild.name) + str('!'), color = discord.Color.red())
      muteembedmember.add_field(name = 'Moderator', value = ctx.author.mention, inline = True)
      muteembedmember.add_field(name = 'Reason', value = reason, inline = True)
      muteembedmember.add_field(name = 'Time', value = time, inline = True)
    
      guild = ctx.guild
      mutedRole = discord.utils.get(guild.roles, name = 'Muted')
    
      if not mutedRole:
        mutedRole = await guild.create_role(name = 'Muted')
        for channel in guild.channels:
          await channel.set_permissions(mutedRole, speak = False, send_messages = False, read_message_history = True, read_messages = False)
      if mutetime <= 0:
        await ctx.send(f'Time must not be less than or equal to zero!')
      else:
        if end_time == 's':
          await member.add_roles(mutedRole, reason = reason)
          await ctx.send(embed = muteembedserver)
          await member.send(embed = muteembedmember)
          await asyncio.sleep(mutetime)
          await member.remove_roles(mutedRole)
        elif end_time == 'm':
          await member.add_roles(mutedRole, reason = reason)
          await ctx.send(embed = muteembedserver)
          await member.send(embed = muteembedmember)
          await asyncio.sleep(mutetime * 60)
          await member.remove_roles(mutedRole)
        elif end_time == 'h':
          await member.add_roles(mutedRole, reason = reason)
          await ctx.send(embed = muteembedserver)
          await member.send(embed = muteembedmember)
          await asyncio.sleep(mutetime * 60 * 60)
          await member.remove_roles(mutedRole)
        elif end_time == 'd':
          await member.add_roles(mutedRole, reason = reason)
          await ctx.send(embed = muteembedserver)
          await member.send(embed = muteembedmember)
          await asyncio.sleep(mutetime * 60 * 60 * 24)
          await member.remove_roles(mutedRole)
        else:
          await ctx.send(f'**You entered the wrong time!(Example: 10s,10m,10h,10d)**')
    
    #unmate command
    @client.command()
    @commands.has_permissions(manage_messages = True)
    async def unmute(ctx, member:discord.Member):
      guild = ctx.guild
      mutedRole = discord.utils.get(guild.roles, name = 'Muted')
      await member.remove_roles(mutedRole)
      await ctx.send(f"{member.mention} Successfully unmuted by {ctx.author.mention}.")
      await member.send(f'You were unmuted in the server {guild.name}.')
    
    #ban command
    @client.command()
    @commands.has_permissions(ban_members = True)
    async def ban(ctx, member:discord.Member, *, reason = None):
      guild = ctx.guild
      if reason == None:
        reason = f'None'
      else:
        reason = reason
      if ctx.author.top_role < member.top_role:
        await ctx.send(f"You can't ban members with a higher role than you!")
      elif ctx.author.top_role > member.top_role:
        await ctx.guild.ban(member, reason = reason)
        await ctx.send(f'{member.mention} Successfully banned by {ctx.author.mention} for reason {reason}.')
      elif ctx.author.guild_permissions.administrator:
        await ctx.guild.ban(member, reason = reason)
        await ctx.send(f'{member.mention} Successfully banned by {ctx.author.mention} for reason {reason}.')
      else:
        await ctx.send(f'Error')
    #unban command
    @client.command()
    @commands.has_permissions(ban_members = True)
    async def unban(ctx, *, member):
      bannedUsers = await ctx.guild.bans()
      member = await commands.converter.UserConverter().convert(ctx, member)
      for ban_entry in bannedUsers:
        user = ban_entry.user
        if user.id == member.id:
          await ctx.guild.unban(user)
          await ctx.send(f'{user.mention} Successfully unbanned by {ctx.author.mention}.')
        elif user.id != member.id:
          await ctx.send('User not banned!')
        else:
          await ctx.send(f'Error')
    #Connect
    client.run(config.TOKEN)

    Надеюсь мой ответ помог.
    P.S вы забыли client.process_commands(message)
    Ответ написан
    Комментировать
  • Cython как компилировать и использовать?

    AIRC24
    @AIRC24 Автор вопроса
    Проблема в Visual studio
    Ответ написан
    Комментировать
  • Как исправить данную ошибку?

    У большей части запросов в Telegram Api есть лимиты по времени на 30 сек, 30 минут, раз в сутки. Обычно 19 или меньше запросов к Api за 30 минут он отклоняет, и твоя библиотека выдает ошибку. Если они выдаются с интервалом что он выдает меньше чем по лимиту - все будет хорошо. Внимание - для богатого использования Api вам может потребоваться не один аккаунт в вашем проекте.(мой пересказ переведеного ответа на похожую проблему на StackOverflow).
    Ответ написан
    Комментировать
  • Почему когда я молчу спамит Неизвестная команда?

    ошибка в том что он возвращает пустой текст или видит шумы микрофона - надо попробовать следующее: проверить что возвращает сервис при молчании потом сделать if типо:
    print(text)
    if predicate(text) == "молчание":
       pass
    else:
       m.say_message("Неизвестная команда")
    Ответ написан
  • В чем причина ошибки в импорте модуля Telegram?

    есть вероятность вы не ту установили("pip install python-telegram-bot" вы же сделали?)
    Ответ написан
  • Как подключить многопоточность(python)?

    достаточно просто :
    import threading # библеотеки базовые - ничего устанавливать не надо
    from queue import Queue # вариант получения значения №1
    
    items = ["1", "2"] # пример списка
    s = None # вариант получение значения №2
    def function_for_new_thread(items, queue): # thread работает с функциями
        global s # пользуемся глобальностью что очевидней но не рекомендованно
        its = []
        for elem in items:
            its.append(elem)  # ваш код
        s = its # глобальная переменная получает нужное значение (№1)
        queue.put(its) # пишем в queue наш список (№2)
    var_for_thread = Queue() # создание queue
    new_thread = threading.Thread(target=function_for_new_thread, 
                                  args=(items, var_for_thread,)) 
    # target = функция, args=(нужные данные,) запятая в конце перечисления всех обязательна
    new_thread.start() # на старт, внимание, марш
    new_thread.join() # ждем поток
    print(var_for_thread.get()) # наши данные через queue (№1)
    print(s) # наши данные через global (№2)
    Ответ написан
    Комментировать
  • Как не генерировать пароль который уже был в сгенерирован?

    во первых открывать заново файл не надо.
    f = open(f'text.txt', 'a')
    while True:
            is_first = False
            cs = random.randint(int(col1),int(col2))
            symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
            rand = (''.join(choice(symbols) for i in range(cs)))
            f.write(f'{rand}\n')
            print(rand)
    f.close()

    во вторых можно так:
    f = open(f'text.txt', 'a')
    while True:
            is_first = False
            cs = random.randint(int(col1),int(col2))
            symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
            rand = (''.join(choice(symbols) for i in range(cs)))
            if rand in f.read().splitlines():
                continue
            else:
                f.write(f'{rand}\n')
                print(rand)
    Ответ написан
  • Как сделать из python файла .exe?

    pyinstaller отличный выбор но в exe вы решите проблему только для windows, вроде надо их компилировать в самой ОС под которую вы хотите сделать (наверное придется как некоторые разработчики - поставлять программу под все ОС вместе) наверное ты не изучал разница ОС-м. Надеюсь мой ответ понятен.
    Ответ написан
  • Почему PIL не может найти атрибут open объекта Image?

    from PIL import Image
    img  = Image.open("test.jpg")
    img.save("test_good.jpg")
    Ответ написан
    Комментировать
  • Как сократить и оптимизировать алгоритм?

    можно тут посмотреть
    можно использовать nimpy(использует NIM), pypy(JIT), Cython(C код компилирует твою программу).
    источник
    Ответ написан
    Комментировать
  • Как пропустить ошибку?

    а можешь сделать перехват всех ошибок?
    Ответ написан
    Комментировать
  • Как использовать переменную из функции внутри класса для работы с другими функциями?

    я думую вы хотите пользоватся переменной в другим функциях. надо сделать её глобальной надо вызвать за пределы функции потом в функции приписать global "имя переменной"
    d = 12
    def de():
        global d
        d-=2
        print(d)
    de()
    Ответ написан