• Как отправить рандомную фотографию из папки в проекте, Telegram bot - python?

    MinTnt
    @MinTnt
    import telebot
    from telebot import types
    import os
    import random
    
    bot = telebot.TeleBot("token")
    
    @bot.message_handler(content_types=['text'])
    def start(message):
    	if message.text.lower() == '/photo':
    		kbPhoto = telebot.types.ReplyKeyboardMarkup()
    		kbPhoto.row('Получить фото')
    		kbPhoto.row('Выйти')
    		bot.send_message(message.from_user.id, 'Нажмите на кнопку ниже, чтоб получить фотографию.', reply_markup = kbPhoto)
    	if message.text.lower() == 'получить фото':
    		photo = open('test/' + random.choice(os.listdir('test')), 'rb')
    		bot.send_photo(message.from_user.id, photo, caption = 'Лови')
    	if message.text.lower() == 'выйти':
    		bot.send_message(message.from_user.id, 'Клавиатура убрана.', reply_markup = types.ReplyKeyboardRemove())
    
    bot.polling( none_stop = True, interval=0 )

    *Но это при условии, что в той же директории файла есть папка 'test' с картинками
    Ответ написан
    7 комментариев
  • Как сделать что-бы бот телеграм из папки отправлял рандомную фотографю в чат?

    MinTnt
    @MinTnt
    import telebot
    from telebot import types
    import os
    import random
    
    bot = telebot.TeleBot("token")
    
    @bot.message_handler(content_types=['text'])
    def start(message):
    	photo = open('test/' + random.choice(os.listdir('test')), 'rb')
    	bot.send_photo(message.from_user.id, photo)

    #os.listdir - получает список всех файлов в папке "test"
    #random.choice - выбирает из списка файлов случайный файл
    #photo = open() и bot.send_photo - отправка фото

    *Но нужно учитывать, что этот пример, если в той же директории находится эта папка "test" с файлами
    **Если в этой папке будут другие файлы(не изображения) может вылезти ошибка, так что потом можно ещё добавлять проверку, чтоб в списке были лишь файлы определённого формата.
    Ответ написан
  • Как можно сделать так что б телеграм бот постоянно спрашивал и записывал ответ пользователя?

    MinTnt
    @MinTnt
    otvet = []
    
    @bot.message_handler(content_types=['text'])
    def send_text(m):
    	if m.text.lower() == 'время':
    		bot.send_message(m.chat.id, 'давай')
    		bot.register_next_step_handler(m,ggh)
          
    def ggh(m):
    	if not m.text.lower() == 'отмена':
    		otvet.append(m.text)
    		bot.send_message(m.chat.id, 'Введи ещё что-то')
    		bot.register_next_step_handler(m,ggh)
    	else:
    		return(otvet)        
    
    bot.polling()
    Ответ написан
  • Почему не работает ВелкомБот Telegram?

    MinTnt
    @MinTnt
    user_name = message.new_chat_members[0].first_name

    message.new_chat_members - возращает список новых пользователей. И вот выходит, что из списка, пытаешься достать first_name, так что добавив индекс 0, будет учитываться первый в списке элемент.

    Можно ещё добавить строчку после def handler_new_member(message):
    print(message.new_chat_members), чтоб посмотреть что туда попадает, и срабатывает ли всё
    Ответ написан
    Комментировать
  • Как синхронизировать отображение цветов?

    MinTnt
    @MinTnt
    Может сделать, чтоб при нажатии на кнопки 1 и 2, ненужные поля(те что не меняют цвет), красились в белый?

    А то выходит, что если к примеру нажать 1, а потом к примеру 2, то оно из-за того что первые квадратики так и не заменяет. Во время мигания 2, оно может сливаться под один цвет.

    Самое простое что смог придумать, подобавлять закраску всего экрана в белый при нажатии кнопки
    if i.type == pygame.KEYDOWN:
                if i.key == pygame.K_1:
                    screen.fill(WHITE)
                    active_first_fourth = True
                    active_second_fourth = False
                if i.key == pygame.K_2:
                    screen.fill(WHITE)
                    active_first_fourth = False
                    active_second_fourth = True
                if i.key == pygame.K_0:
                    screen.fill(WHITE)
                    active_first_fourth = True
                    active_second_fourth = True

    По итогу всё заработало успешно.
    Весь код, если надо

    import pygame
    import sys
    
    # здесь определяются константы,
    # классы и функции
    WIN_WIDTH = 600
    WIN_HEIGHT = 600
    WHITE = 255, 255, 255
    BLACK = 0, 0, 0
    PINK = 255, 0, 255
    AQUA = 0, 255, 255
    RED = 255, 0, 0
    
    FPS = 1
    
    class ChangeColor():
    
        color_to_change = 1
    
        def __init__(self, surface, first_fourth, second_fourth, color_to_change):
            self.first_fourth = first_fourth
            self.second_fourth = second_fourth
            self.color_to_change = color_to_change
            self.surface = surface
    
        def change(self):
            if self.color_to_change % 2 == 0:
                self.surface.fill(AQUA)
                screen.blit(self.surface, self.first_fourth)
                screen.blit(self.surface, self.second_fourth)
                self.color_to_change += 1
            else:
                self.surface.fill(RED)
                screen.blit(self.surface, self.first_fourth)
                screen.blit(self.surface, self.second_fourth)
                self.color_to_change += 1
    
    # Создание ректов для каждый четверти
    fourth_1 = pygame.Rect((WIN_WIDTH // 2, 0), (WIN_WIDTH // 2, WIN_HEIGHT // 2))
    fourth_2 = pygame.Rect((0, 0), (WIN_WIDTH // 2, WIN_HEIGHT // 2))
    fourth_3 = pygame.Rect((0, WIN_HEIGHT // 2), (WIN_WIDTH // 2, WIN_HEIGHT // 2))
    fourth_4 = pygame.Rect((WIN_WIDTH // 2, WIN_HEIGHT // 2), (WIN_WIDTH // 2, WIN_HEIGHT // 2))
    
    # здесь происходит инициация,
    # создание объектов
    pygame.init()
    screen = pygame.display.set_mode((600, 600))
    screen.fill(WHITE)
    clock = pygame.time.Clock()
    
    surf_fourth = pygame.Surface((fourth_1.width, fourth_1.height))
    
    # Создание экземпляра класса ChangeColor
    first_two_quarters = ChangeColor(surf_fourth, fourth_1, fourth_3, 1)
    second_two_quarters = ChangeColor(surf_fourth, fourth_2, fourth_4, 2)
    
    # если надо до цикла отобразить
    # какие-то объекты, обновляем экран
    pygame.display.update()
    
    active_first_fourth = False
    active_second_fourth = False
    
    # главный цикл
    while True:
    
        # задержка
        clock.tick(FPS)
    
        # цикл обработки событий
        for i in pygame.event.get():
            if i.type == pygame.QUIT:
                sys.exit()
            if i.type == pygame.KEYDOWN:
                if i.key == pygame.K_1:
                    screen.fill(WHITE)
                    active_first_fourth = True
                    active_second_fourth = False
                if i.key == pygame.K_2:
                    screen.fill(WHITE)
                    active_first_fourth = False
                    active_second_fourth = True
                if i.key == pygame.K_0:
                    screen.fill(WHITE)
                    active_first_fourth = True
                    active_second_fourth = True
    
        if active_first_fourth:
            first_two_quarters.change()
        if active_second_fourth:
            second_two_quarters.change()
    
        # --------
        # изменение объектов
        # --------
    
        # обновление экрана
        pygame.display.update()



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

    MinTnt
    @MinTnt
    text = input('Введите слово: ')
    while len(text) > 2:
    	text = text[1:len(text) - 1]
    	print(text)
    Ответ написан
    4 комментария
  • Скрипт подбора пароля к архиву 7z на python?

    MinTnt
    @MinTnt
    Нужно добавить своеобразную "краш" проверку:

    passfile = open('\pass.txt', 'r') # открываю файл с паролями для чтения 
    Lines = passfile.readlines() # в файле каждый вариант пароля на новой строке. Читаем файл построчно.
    for word in Lines: 
        try:
            arch = py7zr.SevenZipFile('\Archive.7z', mode='r', password=word)
            arch.extractall(path="\\")
            print('Пароль "' + word + '" подошёл!')
        except Exception:
            print('Пароль "' + word + '" не подошёл')
    Ответ написан
    Комментировать
  • На чьей стороне ошибка?

    MinTnt
    @MinTnt
    Итак. Если у кого-то будет подобная ошибка:
    User authorization failed: invalid session
    То нужно будет попробовать:
    1. Проверить ключи/ выдать весь доступ
    2. Перезайти во Вконтакте
    Ответ написан
    Комментировать
  • Как запустить Python скрипт на хостинге/виртуальном сервере?

    MinTnt
    @MinTnt
    Тут в пример приведено пару бесплатных хостингов
    Где взять бесплатный python хостинг для маленького проекта?

    К примеру вот от гугл - https://cloud.google.com/appengine/docs/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 комментария
  • Кто можеть дать ссылку на инфу где с помощью Kivy определяешь местоположение по GPS свой телефон?

    MinTnt
    @MinTnt
    https://stackoverflow.com/questions/16917149/how-t... #Идентичный вопрос
    https://github.com/kivy/plyer #приложение plyer, в котором так же есть функция GPS

    Код ответа:
    import android
    droid = android.Android()
    loc = droid.readLocation()
    lattitude = loc.result['network']['latitude']
    longitude = loc.result['network']['longitude']
    print(lattitude, longitude )
    Ответ написан
    Комментировать
  • Как реализовать систему вопросов в телеграм боте?

    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 комментарий