Ответы пользователя по тегу Python
  • Бот реагирует только на первый обработчик. Как исправить?

    @nedland
    Второму обработчику ты не установил на какие типы сообщений ему реагировать В первом у тебя есть content_types=['text'], во втором нет. Можно еще поставить ['photo'] или ['video'] и он будет реагировать только на них.

    Ну и пока не поздно. Только начинаешь вникать. Резко переходи на асинхронную библиотеку, например на aiogram.
    Ответ написан
  • Делаю бота на aiogram с машиной состояний, она то как раз и не работает, сам бот выходит в онлайн без проблем, как исправить?

    @nedland
    Сделай по примеру.

    class fsmtest(StatesGroup):
        faze1 = State()
        faze2 = State()
        result = State()
    
    @dp.message_handler(state='None')
    async def startfsmtest(message : types.Message, state: FSMContext):
     #тут что хочешь
     await fsmtest.faze1.set()
     
    @dp.message_handler(state=fsmtest.faze1)
    async def fsmfaze1(message : types.Message, state: FSMContext):
     #тут что хочешь, прокси и т.п.
     await fsmtest.next()
    
    @dp.message_handler(state=fsmtest.faze2)
    async def fsmfaze2(message : types.Message, state: FSMContext):
     #тут что хочешь, прокси и т.п.
     await fsmtest.next()
    
    @dp.message_handler(state=fsmtest.result)
    async def fsmresult(message : types.Message, state: FSMContext):
     #тут что хочешь, прокси и т.п.
     await state.finish()
    Ответ написан
  • Как задать телеграм боту на питоне сообщение, которое он будет выдавать раз в неделю?

    @nedland
    Решил сделать друзьям телеграм бота для квиза и хочу чтобы он по понедельникам сам выдавал напоминание типа: "Будем ли играть в квиз в пятницу?"

    import asyncio
    from datetime import datetime

    С помощью asincio создать loop который (к примеру) каждые 2 часа будет запускать функцию, которая будет проверять условие if Day == понедельник и 10.00 >= Time >= 8:00: напомнить о квизе.
    Нагрузки никакой не будет. Писать код не хочу, т.к это уже задание, а не правка. Попробуй реализовать, а там поможем.
    P.S уверен есть и другие способы, но я вижу такой
    Ответ написан
  • Сделал отправку фото и чтоб под конец выходила кнопка на сайт но когда запускаю выводится invalid syntax, и выделяет kup. как исправить ошибку?

    @nedland
    Если тебе просто нужна INLINE кнопка с текстом и ссылкой на сайт без callback и т.п.
    bot.send_message(message.chat.id, "Привет, {0.first_name}! Нажми на кнопку и перейди на сайт)".format(message.from_user), reply_markup=markup)kup)

    Попробуй
    bot.send_message(message.chat.id, f'Привет, {0.first_name}! Нажми на кнопку и перейди на сайт)', reply_markup=markup)
    Ответ написан
    Комментировать
  • Как заупстить асинхронный цикл вне основного потока?

    @nedland
    Может за ответ и не пойдет, но если тебе нужно, чтобы каждые 10 секунд выполнялась асинхронная функция, то я бы это делал с помощью asyncio

    import asyncio
    
    async def example():
        while True:
    
            #ТУТ ВЫПОЛНЯЙ ЛЮБЫЕ ДЕЙСТВИЯ, КОТОРЫЕ БУДУТ ПОВТОРЯТСЯ В ЗАДАНОМ ИНТЕРВАЛЕ (интервал ниже)
    
            await asyncio.sleep(10) #10 СЕКУНД 
    
    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.create_task(example())


    Работает самостоятельно, как ты говоришь "вне основного цикла"
    Ответ написан
    Комментировать
  • Aiogram python как сделать, чтобы значение прибавлялось?

    @nedland
    Чтобы функция запустилась, её нужно вызвать. Предположу, что из-за этого и ошибок нет (либо вызовете её там, где нужно, а не при запуске бота)
    if __name__ == '__main__':
        profit()

    А т.к. она у вас засыпает, нужно её будить, поэтому добавляем
    if __name__ == '__main__':
     loop = asyncio.get_event_loop()
     loop.create_task(profit())

    Опять же не видел логики всей скрипта вашего. Когда и зачем запускается функция профит. В некоторых случаях, все, что я написал - неактуально (например нужно вызвать колбэком)
    Когда уже сделаете то, что написал выше - появятся ошибки. Как-то так
    Ответ написан
  • Aiogram бот засыпает, как решить данную проблему?

    @nedland
    import logging
    import asyncio
    import random
    import sqlite3
    import string
    import json
    
    #aiogram и всё утилиты для коректной работы с Telegram API
    from aiogram import Bot, types
    from aiogram.utils import executor
    from aiogram.utils.emoji import emojize
    from aiogram.dispatcher import Dispatcher
    from aiogram.types.message import ContentType
    from aiogram.utils.markdown import text, bold, italic, code, pre, hbold, hunderline
    from aiogram.types import ParseMode, InputMediaPhoto, InputMediaVideo, ChatActions
    from aiogram.types import ReplyKeyboardRemove,ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton
    from aiogram.dispatcher import FSMContext
    from aiogram.dispatcher.filters.state import State, StatesGroup
    from aiogram.contrib.fsm_storage.memory import MemoryStorage
    import aiogram.utils.exceptions
    from aiogram.types.message import ContentTypes
    
    #конфиг с настройками
    from config import TOKEN
    from database import dbworker
    
    #инициализируем бота
    bot = Bot(token=TOKEN, parse_mode=types.ParseMode.HTML)
    dp = Dispatcher(bot,storage=MemoryStorage())
    
    #логирование
    logging.basicConfig(filename="all_log.log", level=logging.INFO, format='%(asctime)s - %(levelname)s -%(message)s')
    warning_log = logging.getLogger("warning_log")
    warning_log.setLevel(logging.WARNING)
    
    fh = logging.FileHandler("warning_log.log")
    
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    
    warning_log.addHandler(fh)
    
    @dp.message_handler(commands=['start'],state='*')
    async def start(message : types.Message, state: FSMContext):
    // НИКОГДА НЕ ЗАСЫПАЕТ, ЧТО БЫ НЕ БЫЛО ТУТ
    
    if __name__ == '__main__':
        executor.start_polling(dp, skip_updates=True)


    Всех ботов, что делал, так сказать шаблон для старта - никогда не засыпает
    Ответ написан
    1 комментарий
  • Автопостинг в соц. сети(Instagram,FB,OK,VK, Telegram) c помощью Python?

    @nedland
    Есть скрипт TG->DS и VK, пиши тг @optiqk
    Ответ написан
    Комментировать
  • Вывести случайный ключ из словаря json?

    @nedland Автор вопроса
    import random
    
    def randitem():
        with open("file.json") as file:
            dict = json.load(file)
    
        dictlist = list(dict.items())
        random.shuffle(dictlist)  
           
        for k, v in dictlist[-1:]:
            randkeyvalue =   f"Имя: {v['Name']}\n" \
                             f"Возраст: {v['Age']}\n"


    Сделал вот так, работает как нужно. Если [-1:] изменить на -2, -3 и т.п. выведите столько случайных итемов. Спс всем.
    P.S
    dictlist = random.shuffle(list(dict.items()))
    Ответ написан
    Комментировать