• Как получить вторую строку в многострочной строке?

    Amoralny
    @Amoralny
    Python-разработчик
    Если я правильно понял, то должно получиться так
    a = '''0
    0.00%'''
    
    print(a.split('\n')[1])
    Ответ написан
  • Как подсчитать все мои элементы в sql?

    Amoralny
    @Amoralny
    Python-разработчик
    Как вариант - корзины можно хранить в одной таблице, например Orders, при этом храня id пользователя и номер продукта, который был добавлен, и желательно добавить primary key, чтобы удалять позиции, которые были удалены пользователем.

    Будет что-то типа:
    +---+---------+-------------+-------+
    | id | user_id | product_id | count |  
    +---+---------+-------------+-------+


    После чего можно будет сделать так
    SELECT count FROM Orders WHERE user_id = "user_id" AND product_id = "product_id ";

    Тем самым ты получишь количество определённого товара.

    Так можно будет удалять записи, например, если продукт был удалён
    DELETE FROM Orders WHERE id = "id";
    id - это primary key, но не ид пользователья!

    Возможно, есть более простой способ, но я бы сделал так.
    Ответ написан
    9 комментариев
  • __init__ missing 1 required positional argument?

    Amoralny
    @Amoralny
    Python-разработчик
    В traceback:
    with open(Database().file, 'r') as f:
        ...

    Объясняю, ты создаёшь экземпляр класса Database, но не передаешь ему файл.
    Сделай класс Table наследуемым от Database или передавай в Table экземпляр класса Database.
    Замени Database().file на self.file

    У тебя так много где написано в Table, замени
    Ответ написан
    2 комментария
  • Есть ли разница между написаниями?

    Amoralny
    @Amoralny
    Python-разработчик
    Когда вводишь данные, ставь их в "", тогда SQL будет читать их как строки.
    UPDATE data SET inventory = "{inventory}" WHERE id = "id";

    И даже если вставить вместо id какой-то код для изменения базы, то SQL будет искать что-то типа:
    ... id="6346327; DROP DATABASE base";

    Еще в cursor() есть свой ввод данных
    cursor.execute("UPDATE data SET inventory = :inventory WHERE id = :id", {"inventory" : inventory-1, "id" : id})
    #или
    cursor.execute("UPDATE data SET inventory = ? WHERE id = ?", (inventory-1, id))


    Если же надо полностью запретить использование команд SQL, то проверяй каждый запрос на их наличие.
    Еще можно выдать определенные права пользователю SQL и тогда он сможет только читать, обновлять и добавлять, что, на мой взгляд, не так страшно, как полное удаление базы.

    ps. не юзай root пользователя для запросов :D
    Ответ написан
    2 комментария
  • Почему телеграмм бот выключается от нагрузки памяти на хостинге?

    Amoralny
    @Amoralny
    Python-разработчик
    Тут нужно отталкиваться от количества ОЗУ на сервере и от того, что именно делает бот.
    Если он накапливает в себе те или иные данные, по типу: списков, словарей и тд, и при этом они довольно такие большие, то ОЗУ может не хватать.
    Ответ написан
  • Как реализовать данный метод?

    Amoralny
    @Amoralny
    Python-разработчик
    Вот так :D
    # split() - превратит строку в список, в аргумент можно передать сепаратор, по которому будет вестись объединение
    to_check = "ala ala lapa papa ala lapa".split() 
    data = {}
    
    for i in to_check:
        if i not in data:
            data.update({i:to_check.count(i)})
    
    print(data)
    Ответ написан
    5 комментариев
  • Как открывать и закрывать порты через Python?

    Amoralny
    @Amoralny
    Python-разработчик
    В модуле import os есть метод system(), который отправляет команды в shell.

    import os
    
    request = ('...') # здесь код для открытия или закрытия портов
    code = os.system(request)
    
    print(code) # если выводит 0 - то успешно

    Ещё можно взять subprocess, а именно,- метод call(request, shell=True)
    Ответ написан
    Комментировать
  • Как сделать так, чтобы telegram bot принимал только целочисленные сообщения?

    Amoralny
    @Amoralny
    Python-разработчик
    Вот так можно:
    bot.message_handler(content_types=['text'])
    def reg_age(message):
      age = message.text
      if age.isdigit():
        age = int(age) # свернём в int, тк хвост из левых чисел нам не нужен
        bot.send_message(message.chat.id, f"Хорошо тебе! {age} лет") #берём "f" чтобы все встало само,  без перегона в srt 
        bot.register_next_step_handler(message, next_step) # указывай какая функция будет обрабатывать следующее сообщение пользователя
      else:
        bot.send_message (message.chat.id, "Возраст это число, а не текст! ")
        bot.register_next_step_handler(message, reg_age) # Следущее сообщение пользователя считает функция reg_age


    str.isdigit() #проверяет - является ли строка числом

    ps. код взять от человека, ответившего выше, я доработал :D
    Ответ написан
  • Бот перестает изменять цвет роли. Как исправить?

    Amoralny
    @Amoralny
    Python-разработчик
    Я, конечно, не пишу на JS, но я бы посоветовал ждать перед каждой сменой цвета.

    ...
    #спать 3 секунд
    channel.setColor(`#FA8072`);
    #спать 3 секунд
    channel.setColor(`#FFA500`);
    #спать 3 секунд
    channel.setColor(`#FFD700`);
    ...


    Можно еще загнать смену в for, тогда и код получится меньше.
    Чем больше интервал - тем меньше шанс бана.

    Если учитывать все нюансы - довольно бесполезная функция :(
    Ответ написан
    Комментировать
  • Почему бот не удаляет приватный канал после его создания?

    Amoralny
    @Amoralny
    Python-разработчик
    Можно попробовать так, не идеально, нужно доработать

    category_id = 778594516856733696 # id категории
    make_channel_id = 'id' # id канала, для создания временных каналов
    temp = []
    
    @bot.event
    async def on_voice_state_update(member, before, after):
        if after.channel:
            if after.channel.id == make_channel_id:
                guild = member.guild # достём guild
    
                # достаём категорию, здесь нужно исправить, но я не помню что и как
                # по итогу здесь должен быть объект категории
                category = discord.utils.get(guild.categories, id=category_id)
    
                # создаём канал в категории
                created_channel = await guild.create_voice_channel(
                    f'╠╣{member.display_name}',
                    position=3,
                    category=category,
                    bitrate=96000
                )
    
                # устанавливаем права
                await created_channel.set_permissions(member, connect=True, mute_members=True, move_members=True, manage_channels=True)
                # двигаем пользователя в канал
                await member.move_to(created_channel)
                # чтобы ничего не ждать, сохраняем id канала
                temp.append(created_channel.id)
    
        # алгоритм удаления
        elif before.channel:
            # проверяем id в списке
            if before.channel.id in temp:
                # если нет пользователей - удаляем
                if not before.channel.members:
                    return await before.channel.delete()


    Косяки, которые есть в этом коде:
    - Если в войсе бот, то войс не будет удален, пока бот не выйдет
    - Если овнер выйдеи, то войс останется

    Как вариант - можно просто взять объект категории и создать через него

    category.create_voice_channel(data)
    Ответ написан
    Комментировать
  • Как транслировать музыку со стрима?

    Amoralny
    @Amoralny
    Python-разработчик
    Для проигрывания музыки можно использовать Lavalink.
    КЛАЦ

    Там есть пример простого бота.
    Ответ написан
    Комментировать
  • Как настроить взаимодействие между telebot и telethon скриптами?

    Amoralny
    @Amoralny
    Python-разработчик
    Ну, если я правильно понял, то алгоритм может быть таким:

    1. Бот принимает сообщения от Y и отправляет его пользователю на telehon (должен принимать сообщения только от бота на telebot)
    2. Пользователь отправляет его X, если нужно получить только один ответ - реализуй минимальный кэш, с сохранением id получателя и убирай его, когда получишь ответ.
    3. Полученный ответ отправляется обратно боту на telebot и пересылается Y

    Костыльно, но, как я считаю, - более простой метод, нежели IPC
    Ответ написан
    2 комментария