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

    @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
    В дополнения ко всем ответам. Не знаю кто ты и создатель в каких "отношениях"
    Если например ты заказчик, а создатель бота сбросил тебе все данные и в коде нет лишних ухищрений по записям/доступу к записям через самого бота, то по сути создатель не может ничего.
    Если ты обычный пользователь то создатель может все, что ты написал, при условии их "записи" (вариантов реализации куча). По его желанию короче.
    В любом случае лучше уточнить в каких вы "отношениях" с создателем для лучшего ответа тут :)
    Ответ написан
    1 комментарий
  • Как настроить авторепост с Telegram-канала в паблик-VK?

    @nedland
    Когда-то делал подобное человечку. Получился костыль, но рабочий, вдруг возьмешь за идею и сделаешь свое. Значит, человек хотел, что бы не ВСЕ статьи публиковались в телеграм-вк-дискорд, а определенные. Так вот, когда он вручную делал пост в телеграм канале - ничего не "перекидывалось". Теперь к делу (идее).
    Человек был обычным пользователем и все должно было быть "человекоподобно" и просто. Так вот, я сделал ему простую форму публикации ПОСТА на его сайте. Понятно, выделил то, что ему нужно. Фото и текст. Записывалось это все в JSON файл. Можно и в БД, как удобнее, объем маленький. Далее в уже имеющегося бота библиотекой asincio, методом sleep каждый час проверял на наличие новых ПОСТОВ в БД и с помощью методов библиотек aiogram, discord-webhook и vk_api делал посты в группы-каналы. Вот ЧАСТЬ конечного кода, остальное не хочу копаться (сама функция и куча донастроек и т.п.). Можно написать, что б прям сразу же публиковалось, но я не помню почему он так захотел, была причина.

    import aiogram
    import vk_api
    from discord_webhook import DiscordWebhook
    
    
    
    async def bids():
    
     fresh_bids = get_freshbids() ### Функция сортировки новых/старых, разбивка и присвоение переменных и т.п.
    
    ### Разное оформление для каждой СОЦ СЕТИ
     tgbid =   f" <u>ПОСТ (из бд)</u>"
     discbid =   f" <u>ПОСТ (из бд)</u>"             
     vkbid =     f" <u>ПОСТ (из бд)</u>"
    
    ### ПОСТ В ТГ                  
     await bot.send_message(-10000000000, tgbid, reply_markup=ХХХ,disable_web_page_preview=True)
    ### ПОСТ В ДИСК 
     webhook = DiscordWebhook(url='https://discord.com/api/webhooks/969вава4931/n5CваE САМ ВЕБХУК',  content=f'{discbid}')
     response = webhook.execute()
    ### ПОСТ В ВК                 
     authorize.method('wall.post', {'owner_id': -1000000000, 'message': vkbid})
    
     await asyncio.sleep(3600)


    P.S ЕСЛИ ОЧЕНЬ КОРОТКО тебе нужен бот, который все посты в канале ТГ будет записывать в БД, либо в переменную, а после методами vk_api публиковать пост в ВК. Все просто)
    Ответ написан
    Комментировать
  • Как отправить фото, текст и кнопки в Телеграм -боте одновременно в одном сообщении?

    @nedland
    AIOGRAM
    а я в первоначальное не могу всунуть картинку, чтобы в дальнейшем она менялась.

    @dp.message_handler(commands=['start'],state='*')
    async def start(message : types.Message, state: FSMContext):  
     post = f"Рад тебя видеть!" 
     await bot.send_photo(message.from_user.id, types.InputFile(f"РАСПОЛОЖЕНИЕФОТО/ФОТО.webp"), caption=post, reply_markup=ТВОЁМЕНЮ)

    Как сделать кнопки в ТВОЁМЕНЮ думаю ты знаешь
    Ответ написан
    Комментировать
  • Как убрать клавиатуру в телеграм боте,оставив только кнопки?

    @nedland
    Нельзя (никак).
    Но если тебе нужны именно значения кнопок, а не то, что пользователь может вручную тебе вписать и отправить, то используй IF message.text == кнопка1 (и перечисляй сколько там их): делаем так ELSE вы ввели неправильное значение, попробуйте еще (ну и FSM не завершай после отправки)
    P.S Не благодари
    Ответ написан
    4 комментария
  • Как задать телеграм боту на питоне сообщение, которое он будет выдавать раз в неделю?

    @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
    Как бы делал я. Хотя я джунище еще то и знаю не все методы, любитель велосипедов. Так вот.

    1. Подключил бы библиотеку sqlite3 к сайту (PHP) и боту (Python c aiogram).
    2. На странице заполнения формы, данные вносятся в БД (тут шамань сам под свои данные). Ну и есть колонка в которой будут 3 значения: None, Да, Нет. По умолчанию None
    2. После отправки сообщения на странице как ты написал "ожидания" написать скриптик, которые каждые к примеру 3 секунды проверяет на изменение колонки с None, на Да или Нет. Ну и функция если Да то туда, если Нет то туда.
    3. Переходим к боту. С помощью asincio вывел бы функцию, которая каждые 3 секунды проверяет БД на новые записи и если есть отправляет сообщение куда тебе надо (увязанное с той строкой, которая заполнена по форме) с INLINE кнопками Да или Нет. При нажатии Да - запись в ячейку Да, нажал Нет - запись Нет

    Не знаю поймешь ли ты меня, но такое реализовать не сложно имея базовые знания, как у меня :)
    Ответ написан
    Комментировать
  • 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 комментарий