Задать вопрос
Ответы пользователя по тегу Python
  • Как проверить, подписан ли пользователь на определённый канал?

    MinTnt
    @MinTnt
    https://core.telegram.org/bots/api#getchatmember

    Вот функция для указного действия.
    getchatmember(chat_id, user_id)
    chat_id = id нужного канала/чата
    user_id = id пользователя

    Если пользователь есть в чате, то оно вернёт информацию по нему, если нету, то вроде выдаст исключение, или же просто не сможет получить данных.

    Так как краш программы (из-за исключения) нам не нужно, то весь нужный код вместе с getchatmember делаем вот так:
    try:
        #getchatmember и тд. код
    except Exception:
        bot.sendmessage #Тутя записать сообщение, об ошибке, т.е. прописать код, для случая ,если пользователь не подписан
    Ответ написан
    2 комментария
  • Как реализовать систему вопросов в телеграм боте?

    MinTnt
    @MinTnt
    1). Вообще, добавление к message.chat.id + 1, ничего бы не дало, кроме того, что сообщение бы отправилось вообще незнакомому лицу. message.chat.id, это то куда отправляется сообщение

    2). Предложу другую реализацию для комманд в коде.
    Код
    skill = 0 #Просто добавил счётчик "скилла" правильных и неправильных ответов
    
    @bot.message_handler(content_types=["text"])
    def type_game(message):
        if message.text == "Мои данные":
            bot.send_message(message.chat.id,"Баланс: " + "/n" +
                             "Игр сыграно: " + "/n" +
                             "Правильных ответов: ")
        if message.text == "Бесплатная игра":
            bot.send_message(message.chat.id, "Чтобы начать введите /free_game")
    
        if message.text == "Платная игра":
            bot.send_message(message.chat.id,"Баланс: "  "/n" 
                             "Игр сыграно: " + "/n" +
                             "Правильных ответов: ")
        if message.text == '/free_game': #Другой варянт создания комманд
        	bot.send_message(message.chat.id, SQLighter.answer)
        	bot.register_next_step_handler(message, free_game)#Перенаправил на функцию free_game
    
    def free_game(message):
        if message.text == SQLighter.answer:
            bot.send_message(message.chat.id, "Good")
            skill = skill + 1
            bot.send_message(message.chat.id, SQLighter.answer)
            bot.register_next_step_handler(message, free_game)#Создаёт некий цикл, после ответа, оно занова запускает эту функцию, а так же пишет вопрос из базы данных
        elif message.text == 'Прекратить игру':
        	bot.send_message(message.chat.id, 'Игра приостановлена.')#Так как тут нету register next step и тд., то оно автоматически переадресовывает на type_game
    
        else:
        	skill = skill - 1
            bot.send_message(message.chat.id, "Bad")
            bot.send_message(message.chat.id, SQLighter.answer)
            bot.register_next_step_handler(message, free_game)


    А вообще, мне вот интересно, это хорошо что в коде, DQLighter.answer используется как для вопроса, так и для ответа? Или это пока так.. лишь для проверки системы?
    Ответ написан
  • Скорости while true в python не хватает. Что сделать?

    MinTnt
    @MinTnt
    Это ограниченность самого фреймворка.

    while цикл работает то быстро... Но вот самому фреймворку нужно некоторое время на обработку полученных данных, и выполнение поставленной задачи
    Ответ написан
    6 комментариев
  • Как асинхронно несколько раз выполнить функцию класса?

    MinTnt
    @MinTnt
    https://stackoverflow.com/questions/42009202/how-t... (похожий вопрос на стаковерфлов, отличия лишь, что тут попытка использования асинхронно класса из одного файла, в другом)
    https://habr.com/ru/post/266743/(Немного информации про async)

    Кратко:
    import asyncio

    async def ...():
    Ответ написан
    Комментировать
  • Команда только для выбранных пользователей discord.py?

    MinTnt
    @MinTnt
    Хз возможно ли к дискорд боте такое, но что-то по типу такого предложу:
    1) Создать список тех, кому доступна эта кмд, указав их ID, к примеру
    Admincmdaccess=['27485949', '....]
    2) В коде потом, при вводе определённой кмд, добавить строку для проверки, есть ли данный пользователь в списке, чтоб продолжить:
    if bot.user.id in Admincmdaccess:


    Если такое там можно реализовать, то сделать что-то похожее. Изменив какие-то данные
    Ответ написан
  • Можно ли скопировать PNG изображение в буфер обмена?

    MinTnt
    @MinTnt
    image.convert("RGBA").save(output, "BMP")

    Попробуйка изменить RGB на RGBA в этой строке
    Ответ написан
  • Проблемы с nuitka, как решить?

    MinTnt
    @MinTnt
    Так как в той же директории находятся несколько других Python файлов. Программа просит при компиляции уточнить:
    --follow-imports | Компилировать их всех так же
    --unfollow-imports | Некомпилировать
    Ответ написан
    Комментировать
  • Можно ли после получения данных с сайта переводить их на другой язык(в моем случае русский)?

    MinTnt
    @MinTnt
    if status == "snow":
    status = "снег"

    Можно потом посмотреть где-то все значения, которыми может быть status и записать такую табличку замены для всех варянтов
    Ответ написан
  • Хочу получить местоположение по ip но выдает вот эту ошибку в чём дело?

    MinTnt
    @MinTnt
    Крч. Самая краткая реализация того что ты хотел, это
    pip install geocoder


    import geocoder
    print(geocoder.ip('me').latlng)

    Она напишет координаты указаного IP.

    #Вместо 'me' можно вставить любой IP.

    Но минус в том что всё же нужно где-то будет доставать IP. Да и минус в том, что отслеживание идёт по IP, т.е. очень неточное может быть. Может показывать где провайдер находится и тд.
    Ответ написан
  • Почему выводится пустота?

    MinTnt
    @MinTnt
    Попробуй вот это строчку:
    observation = owm.weather_at_place('London,GB')

    Изменить на эту:
    observation = owm.weather_manager().weather_at_place('London,GB')


    Если и после этого ничего, то введи
    pip install pyowm
    и подожди пока пройдёт установка
    Ответ написан
    1 комментарий
  • Пополнять список бота просто отсылая ему сообщения?

    MinTnt
    @MinTnt
    1) Про API VK мало знаю, но вот одно предолжение для списка, это создать небольшую базу со значениями spisok.txt.
    #Перед этим создав spisok.txt в той же директории, и задав в него нужные данные через Enter
    import re
    
    spisok = []
    with open('spisok.txt', 'r') as f:
    	for i in f.readlines():
    		try:
    			i, _ = re.split('\n', i, maxsplit = 1)
    			spisok.append(i)
    		except Exception:
    			spisok.append(i)
    	print(spisok)
    	f.close()
    #А потом добавление значений в этот список. Пример консольки.
    abprint = input()
    if re.match('-cont ', abprint):#Ищет в начале текста "-cont", если находит то продолжает дальше
    		_, addtext = re.split('-cont ', message.text, maxsplit = 1) #Так как "-cont" в начале присутствует, то разделяет текст, и берёт текст что идёт после "-cont" как "addtext"
    #Потом ещё можно добавить проверку, что if addtext == ""(т.е. ничего не написано) выдавало ошибку или тд.
    		with open('spisok.txt', 'a') as f:#Записывает данные в txt
    			f.write('\n' + addtext)
    			f.close()
    		spisok.append(addtext)#Добавляет значения в список
    Ответ написан
    5 комментариев
  • Как научить бота анализировать входные данные в TeleBotAPI?

    MinTnt
    @MinTnt
    import telebot
    from telebot import types
    import re #Эта библиотека, чтоб с текстом работать. Искать его и тд. Я её юзаю по принципу 'Разделяй и властвуй'
    
    bot = telebot.TeleBot("bot-token") #токен от BotFather'a
    
    @bot.message_handler(content_types=['text']) #Срабатывание на text
    def start(message): #Начало
    	if message.text.lower() == 'вычисли сумму чисел' or message.text.lower() == '/sum':#Команда для начала. message.text - получаемый текст. lower(), значит не учитывается регистр, т.е. и /SUM и /SuM будет считаться за один и тот же текст
    		bot.send_message(message.from_user.id, 'Хорошо. Введи два числа которые ты хочешь суммировать. К примеру "1 и 5".')
    		bot.register_next_step_handler(message, sumcalc)#"Перенаправляет" на след.функцию
    	else:
    		bot.send_message(message.from_user.id, 'Введи /sum, или напиши "Вычисли сумму чисел", чтобы продолжить.')
    
    def sumcalc(message):#После "перенаправления" функция сработает, лишь после получения message
    	try: #try юзаю, чтоб делать проверки каких-то действий. И в случае ошибки, программа не крашнется, а просто выполнит заданные в except действие.
    		number1, number2 = re.split(' и ', message.text, maxsplit = 1)#Разделяет полученный текст по слову " и "
    		try:
    			number1 = int(number1) #Проверка "числа ли?" полученные данные. Если без такой проверки. То при попытке сделать сумму, а там не числа - то краш
    			try:
    				number2 = int(number2)
    				bot.send_message(message.from_user.id, 'Сумма двоих введённых тобой чисел равна - ' + str(number1 + number2))
    			except Exception:
    				bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\nВы ввели не число. /sum - Чтоб повторить сначала.')
    		except Exception:
    			bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\nВы ввели не число. /sum - Чтоб повторить сначала.')
    	except Exception:
    		bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\n*Будьте внимательны*, ввод должен быть формата *"*число *и* число*"*. /sum - Чтоб повторить сначала.', parse_mode= 'Markdown')
    
    bot.polling( none_stop = True, interval=0 )#Чтоб программа не закрывалась никогда
    Ответ написан
    2 комментария