Ответы пользователя по тегу Python
  • Почему телеграм-бот не воспринимает личные сообщения, если начать общаться с ним в беседе?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    1. Бот не может первым написать пользователю, для начала пользователю нужно самому начать диалог с ботом. Это на будущее
    2. Вы привязываете следующий шаг пользователя в том же чате, где и ведется переписка, т.е. в беседе. Бот ждет сообщение там, а пользователь пишет в ЛС. Используйте bot.register_next_step_handler_by_chat_id(). Первым аргументом он принимает ID чата, в котором будет бот ждать сообщение. Соответственно, туда нужно засунуть ID пользователя. Итог:
    Заменяем
    bot.register_next_step_handler(message, dogovor, userID)
    на
    bot.register_next_step_handler_by_chat_id(userID, dogovor)


    И не нужно делать глобальных переменных. Если хотите передать информацию о пользователе дальше, так же передавайте ее через аргументы в register_next_step_handler. Рекомендую создать хотя бы словарь вида {'number': 123, 'surname': 'surname'}.
    В итоге будет нечто такое:
    def dogovor(message):  # получаем фамилию
        num_dog = message.text
        user_info = {'num_dog': num_dog}
        bot.send_message(message.chat.id, 'Какая у тебя фамилия?')
        bot.register_next_step_handler(message, get_surname, user_info)
    
    def get_surname(message, user_info):  # получаем фамилию
        user_info['surname'] = message.text
        print('Фамилия:', user_info['surname'], '. Номер договора:', user_info['dog_num'])


    ps: на будущее - оборачивайте свой код с помощью соотствующей кнопки < / >
    Ответ написан
    Комментировать
  • Как продолжить принимать сообщения aiogram?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Что значит "дальше не идет"? Этот хендлер стоит в самом верху кода? Если так, то он будет ловить все текстовые сообщения, включая сообщения, которые являются просто командами. Так что любые текстовые обработчики ниже него работать не будут

    Если хотите делать такую проверку, я бы сделал свой фильтр, который поставил в хендлер. В фильтре уже проверять пользователя
    Ответ написан
  • Как исправить ошибку json.decoder.JSONDecodeError: Expecting value: line 1 column 8 (char 7)?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    В JSON строка обозначается двойной кавычкой, не одинарной
    Ответ написан
    1 комментарий
  • Где находить api ссылки?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    А этот же сервис чем не угодил
    https://some-random-api.ml/endpoints
    Ответ написан
  • Ошибка match python 3.9.1 invalid syntax?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Спросите у гугла, в какой версии появился match-case, думаю, молчать не будет. Это 3.10
    Ответ написан
    Комментировать
  • Как сохранить invite ссылку по которой перешел пользователь телеграмм бота?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Если имеется в виду GET параметры start или startgroup, то их значение будет добавлено в стартовое сообщение через пробел. Т.е. при https://t.me/triviabot?start=payload бот получит входящее сообщение /start payload

    https://core.telegram.org/bots#deep-linking
    Ответ написан
    Комментировать
  • Можно ли сделать чтобы все 4 слова были не равны между друг другом?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Ответ написан
    Комментировать
  • Почему перестали работать команды в Python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Такие большие декораторы должны быть определены где нибудь в самом низу @bot.message_handler(content_types=['text'])

    Что происходит: пишите /test, библиотека ищет, в какую функцию закинуть это сообщение. И отправляет все это в def send_text(message):, потому что /test хоть и выглядит как команда, все же является текстом. Поэтому срабатывает верхний декоратор, который ловит все текстовые сообщения.
    Ответ написан
    Комментировать
  • Как исправить ошибку не найдена команда?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Не создали команду.

    Либо делаете просто @bot.command(), либо @commands.command(), при этом регистрируя ее с помощью bot.add_command(test).

    @commands.command() есть, а регистрации - нет

    https://discordpy.readthedocs.io/en/stable/ext/com...
    Ответ написан
    Комментировать
  • Как исправить ошибку TypeError: 'type' object is not subscriptable?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    И получается что данные записываются в кортеж

    Как они могут быть кортежем, если вы вызвали list()?

    то есть перепишу в обычный список то пишет ошибку

    Ну правильно, map - это функция, а не итерируемый объект, чтобы к нему так обращаться
    Ответ написан
    1 комментарий
  • Как исправить ошибку в коде?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Если shuffle - это метод из либы random, то он модифицирует оригинальный список, а не возвращает новый.
    Mylist = text.split(", ")
    rd.shuffle(Mylist)
    return "".join(Mylist)
    Ответ написан
    3 комментария
  • Как получить int значение по адресу в памяти?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Любой модуль для работы с памятью

    Например
    import win32api
    import win32process
    import win32con
    
    from ctypes import *
    ntdll = windll.ntdll
    k32 = windll.kernel32
    u32 = windll.user32
    
    
    
    class PROCESSENTRY32(Structure):
        _fields_ = [
            ("dwSize", c_uint32),
            ("cntUsage", c_uint32),
            ("th32ProcessID", c_uint32),
            ("th32DefaultHeapID", c_uint64),
            ("th32ModuleID", c_uint32),
            ("cntThreads", c_uint32),
            ("th32ParentProcessID", c_uint32),
            ("pcPriClassBase", c_uint32),
            ("dwFlags", c_uint32),
            ("szExeFile", c_char * 260)
        ]
    
    
    class Process:
        @staticmethod
        def get_process_handle(name):
            handle = 0
            entry = PROCESSENTRY32()
            snap = k32.CreateToolhelp32Snapshot(0x00000002, 0)
            entry.dwSize = sizeof(PROCESSENTRY32)
            while k32.Process32Next(snap, pointer(entry)):
                if entry.szExeFile == name.encode("ascii", "ignore"):
                    handle = k32.OpenProcess(0x430, 0, entry.th32ProcessID)
                    break
            k32.CloseHandle(snap)
            return handle
    
        @staticmethod
        def get_process_peb(handle, wow64):
            buffer = (c_uint64 * 6)(0)
            if wow64:
                if ntdll.NtQueryInformationProcess(handle, 26, pointer(buffer), 8, 0) == 0:
                    return buffer[0]
            else:
                if ntdll.NtQueryInformationProcess(handle, 0, pointer(buffer), 48, 0) == 0:
                    return buffer[1]
            return 0
        
        def __init__(self, name):
            self.mem = self.get_process_handle(name)
            if self.mem == 0:
                raise Exception("Process [" + name + "] not found!")
            self.peb = self.get_process_peb(self.mem, True)
            if self.peb == 0:
                self.peb = self.get_process_peb(self.mem, False)
                self.wow64 = False
            else:
                self.wow64 = True
            self.pid = win32process.GetWindowThreadProcessId(self.mem)
    
        def is_running(self):
            buffer = c_uint32()
            k32.GetExitCodeProcess(self.mem, pointer(buffer))
            return buffer.value == 0x103
    
        def read_vec3(self, address):
            buffer = Vector3()
            ntdll.NtReadVirtualMemory(self.mem, c_long(address), pointer(buffer), 12, 0)
            return buffer
    
        def read_buffer(self, address, length):
            buffer = (c_uint8 * length)()
            ntdll.NtReadVirtualMemory(self.mem, address, buffer, length, 0)
            return buffer
    
        def read_string(self, address, length=120):
            buffer = create_string_buffer(length)
            ntdll.NtReadVirtualMemory(self.mem, address, buffer, length, 0)
            return buffer.value
    
        def read_unicode(self, address, length=120):
            buffer = create_unicode_buffer(length)
            ntdll.NtReadVirtualMemory(self.mem, address, pointer(buffer), length, 0)
            return buffer.value
    
        def read_float(self, address, length=4):
            buffer = c_float()
            ntdll.NtReadVirtualMemory(self.mem, c_long(address), pointer(buffer), length, 0)
            return buffer.value
    
        def read_i8(self, address, length=1):
            buffer = c_uint8()
            ntdll.NtReadVirtualMemory(self.mem, address, pointer(buffer), length, 0)
            return buffer.value
    
        def read_i16(self, address, length=2):
            buffer = c_uint16()
            ntdll.NtReadVirtualMemory(self.mem, address, pointer(buffer), length, 0)
            return buffer.value
    
        def read_i32(self, address, length=4):
            buffer = c_uint32()
            ntdll.NtReadVirtualMemory(self.mem, address, pointer(buffer), length, 0)
            return buffer.value
    
        def read_i64(self, address, length=8):
            buffer = c_uint64()
            ntdll.NtReadVirtualMemory(self.mem, c_uint64(address), pointer(buffer), length, 0)
            return buffer.value
    
        def write_float(self, address, value):
            buffer = c_float(value)
            return ntdll.NtWriteVirtualMemory(self.mem, address, pointer(buffer), 4, 0) == 0
    
        def write_i8(self, address, value):
            buffer = c_uint8(value)
            return ntdll.NtWriteVirtualMemory(self.mem, address, pointer(buffer), 1, 0) == 0
    
        def write_i16(self, address, value):
            buffer = c_uint16(value)
            return ntdll.NtWriteVirtualMemory(self.mem, address, pointer(buffer), 2, 0) == 0
    
        def write_i64(self, address, value):
            buffer = c_uint64(value)
            return ntdll.NtWriteVirtualMemory(self.mem, address, pointer(buffer), 8, 0) == 0
    
        def get_module(self, name):
            if self.wow64:
                a0 = [0x04, 0x0C, 0x14, 0x28, 0x10]
            else:
                a0 = [0x08, 0x18, 0x20, 0x50, 0x20]
            a1 = self.read_i64(self.read_i64(self.peb + a0[1], a0[0]) + a0[2], a0[0])
            a2 = self.read_i64(a1 + a0[0], a0[0])
            while a1 != a2:
                val = self.read_unicode(self.read_i64(a1 + a0[3], a0[0]))
                if str(val).lower() == name.lower():
                    return self.read_i64(a1 + a0[4], a0[0])
                a1 = self.read_i64(a1, a0[0])
            raise Exception("Module [" + name + "] not found!")
    
        def get_export(self, module, name):
            if module == 0:
                return 0
            a0 = self.read_i32(module + self.read_i16(module + 0x3C) + (0x88 - self.wow64 * 0x10)) + module
            a1 = [self.read_i32(a0 + 0x18), self.read_i32(a0 + 0x1c), self.read_i32(a0 + 0x20), self.read_i32(a0 + 0x24)]
            while a1[0] > 0:
                a1[0] -= 1
                export_name = self.read_string(module + self.read_i32(module + a1[2] + (a1[0] * 4)), 120)
                if name.encode('ascii', 'ignore') == export_name:
                    a2 = self.read_i16(module + a1[3] + (a1[0] * 2))
                    a3 = self.read_i32(module + a1[1] + (a2 * 4))
                    return module + a3
            raise Exception("Export [" + name + "] not found!")
    
        def find_pattern(self, module_name, pattern, mask):
            a0 = self.get_module(module_name)
            a1 = self.read_i32(a0 + 0x03C) + a0
            a2 = self.read_i32(a1 + 0x01C)
            a3 = self.read_i32(a1 + 0x02C)
            a4 = self.read_buffer(a0 + a3, a2)
            for a5 in range(0, a2):
                a6 = 0
                for a7 in range(0, pattern.__len__()):
                    if mask[a7] == 'x' and a4[a5 + a7] != pattern[a7]:
                        break
                    a6 = a6 + 1
                if a6 == pattern.__len__():
                    return a0 + a3 + a5
            return 0


    # Подключаетесь к процессу
    mem = Process('file.exe')
    
    while mem.is_running():
        # тут уже читаем что нужно
        try:
            mem.read_i8(0x0123456789)
        except Exception as e:
            print(e)
    Ответ написан
    Комментировать
  • Ошибка при выполнении кода. Как исправить?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Ставлю на то, что команда лежит вне класса.

    Если это так - ваш аргумент, который id, улетает в параметр ctx, а сам ctx в self.
    Ответ написан
    Комментировать
  • Как сделать кнопку в телеграм боте?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Обычная кнопка

    from aiogram.types import ReplyKeyboardRemove, \
        ReplyKeyboardMarkup, KeyboardButton
    
    @dp.message_handler(commands=['start'])
    async def process_start_command(message: types.Message):
        button_hi = KeyboardButton('/help')
        greet_kb = ReplyKeyboardMarkup()
        greet_kb.add(button_hi)
        await message.reply("Привет!", reply_markup=kb.greet_kb)


    https://core.telegram.org/bots/api#replykeyboardmarkup
    Ответ написан
    Комментировать
  • Как исправить ошибку Unresolved attribute reference 'set_chat_permission' for class 'Bot'?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    s не хватает: set_chat_permissions()
    Ответ написан
    Комментировать
  • Нет ошибок но Telegram bot Python не работает как решить?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Про отсутствие ошибок - это явно не так. Ошибок более чем.
    1. frist_name - неправильно. first_name
    2. Почему при создании кнопок стоит знак вычитания, а не знак присваивания?
    3.
    bot.send_message(message.chat.id,+ str(Random.randint(0, 1000)))
    неправильный вызов, зачем тут плюс и обращаться к библиотеки нужно как random.
    4. Отступы неверные
    5. Команда у вас /starts, вы же отправляете /start
    Ответ написан
    Комментировать
  • Как запретить удаление ссылки, от имени супергруппы?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Посмотреть кто отправил сообщение, и если отправитель - супергруппа, то ничего не делать.
    if message.sender_chat and message.sender_chat == “supergroup”:
        return
    Ответ написан
  • Inline кнопки в Telegram в чем загадка?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Инлайн кнопки не работают, потому что не привязали никакую функцию к нажатию. Все привязки функций к событиям могут осуществляться двумя способами
    1. Использование декоратора
    2. Использование специальной функции

    Обычные кнопки у вас работают потому что использовали второй вариант и вызвали специальную функцию register_*_handler, в то время как для инлайн кнопки вызвали обычную функцию, которая должна являться декоратором.

    Если хочется зарегистрировать хендлер через функцию - велком
    register_callback_query_handler()

    Но смысла от этого мало, как мне кажется, декоратор использовать удобнее

    https://docs.aiogram.dev/en/latest/dispatcher/inde...
    Ответ написан
    Комментировать