Задать вопрос
  • Телеграмм-бот на python telebot. Как сделать чтобы он воспринимал эмодзи?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    А если кодировку задать?
    with open("textOfMessage.txt", "w", encoding="utf-8") as file:
            file.write(emoji.demojize(text_of_message))
  • Как скопировать логотип с сайта?

    Dr_Elvis
    @Dr_Elvis
    Юрий Иванов, само лого https://codepen.io/Dr_Elvis/pen/abqZqQV
    а дальше там JS меняет его. вот тут уже сложно выцепить.
  • Как скопировать логотип с сайта?

    Dr_Elvis
    @Dr_Elvis
    Юрий Иванов, тебе анимацию или только логотип?
  • Выдает ошибку. Что делать?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    Попробуй убрать object
  • Как сделать так чтобы бот в вк отвечал на сообщение в беседе а не в лс?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    Не знаю vk api, но предполагаю что нужно не event.user_id, а что-то типо event.chat_id
  • Почему цикл if в phyton не работает?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    Даже так:
    if check.lower() in ["1", "stymulanta"]:
  • Как соединить redis и телеграм бота?

    Dr_Elvis
    @Dr_Elvis Автор вопроса, куратор тега Python
    shurshur, таки запустил. результат в ответе.
  • Как соединить redis и телеграм бота?

    Dr_Elvis
    @Dr_Elvis Автор вопроса, куратор тега Python
    shurshur, попробовал, всё равно не хочет. Не думал что так сложно будет.
    Traceback (most recent call last):
      File "ldbotaio.py", line 126, in <module>
        asyncio.run(main())
      File "/usr/local/lib/python3.7/asyncio/runners.py", line 43, in run
        return loop.run_until_complete(main)
      File "/usr/local/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
        return future.result()
      File "ldbotaio.py", line 110, in main
        await f1
      File "ldbotaio.py", line 86, in botrun
        port=WEBAPP_PORT,
      File "/home/bot/ldbot/lib/python3.7/site-packages/aiogram/utils/executor.py", line 107, in start_webhook
        route_name=route_name)
      File "/home/bot/ldbot/lib/python3.7/site-packages/aiogram/utils/executor.py", line 78, in set_webhook
        executor.set_webhook(webhook_path, route_name=route_name, web_app=web_app)
      File "/home/bot/ldbot/lib/python3.7/site-packages/aiogram/utils/executor.py", line 289, in set_webhook
        self.loop.run_until_complete(self._startup_webhook())
      File "/usr/local/lib/python3.7/asyncio/base_events.py", line 571, in run_until_complete
        self.run_forever()
      File "/usr/local/lib/python3.7/asyncio/base_events.py", line 526, in run_forever
        raise RuntimeError('This event loop is already running')
    RuntimeError: This event loop is already running
    --- Logging error ---
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/logging/handlers.py", line 70, in emit
        logging.FileHandler.emit(self, record)
      File "/usr/local/lib/python3.7/logging/__init__.py", line 1131, in emit
        self.stream = self._open()
      File "/usr/local/lib/python3.7/logging/__init__.py", line 1121, in _open
        return open(self.baseFilename, self.mode, encoding=self.encoding)
    NameError: name 'open' is not defined
    Call stack:
      File "/home/bot/ldbot/lib/python3.7/site-packages/aiohttp/client.py", line 347, in __del__
        self._loop.call_exception_handler(context)
      File "/usr/local/lib/python3.7/asyncio/base_events.py", line 1634, in call_exception_handler
        self.default_exception_handler(context)
      File "/usr/local/lib/python3.7/asyncio/base_events.py", line 1608, in default_exception_handler
        logger.error('\n'.join(log_lines), exc_info=exc_info)
    Message: 'Unclosed client session\nclient_session: <aiohttp.client.ClientSession object at 0x2b66aee70b00>'
    Arguments: ()
  • Как соединить redis и телеграм бота?

    Dr_Elvis
    @Dr_Elvis Автор вопроса, куратор тега Python
    shurshur, что-то всё равно не могу запустить

    import redis
    import asyncio
    from aiogram import Bot, types
    from aiogram.dispatcher import Dispatcher
    from aiogram.utils.executor import start_webhook
    from aiogram.contrib.middlewares.logging import LoggingMiddleware
    import config as cfg
    
    bot = Bot(token=cfg.bot_token)
    dp = Dispatcher(bot)
    dp.middleware.setup(LoggingMiddleware())
    WEBHOOK_HOST = cfg.WEBHOOK_HOST
    WEBHOOK_PATH = cfg.WEBHOOK_PATH
    WEBHOOK_URL = f'{WEBHOOK_HOST}{WEBHOOK_PATH}'
    WEBAPP_HOST = cfg.WEBAPP_HOST
    WEBAPP_PORT = cfg.WEBAPP_PORT
    
    async def on_startup(dispatcher: Dispatcher):
        await bot.set_webhook(WEBHOOK_URL, drop_pending_updates=True)
    
    async def on_shutdown(dispatcher: Dispatcher):
        await bot.delete_webhook()
    
    
    @dp.message_handler()
    async def echo(message: types.Message):
        await message.answer(message.text)
    
    
    async def botrun():
        start_webhook(
            dispatcher=dp,
            webhook_path=WEBHOOK_PATH,
            skip_updates=True,
            on_startup=on_startup,
            on_shutdown=on_shutdown,
            host=WEBAPP_HOST,
            port=WEBAPP_PORT,
        )
    
    
    async def redisrun():
        r = redis.Redis(host='localhost', port=6379, db=0)
        p = r.pubsub()
        p.subscribe('test')
        while True:
            mes = p.get_message()
            if mes:
                print(mes['data'])
            await asyncio.sleep(0.5)
    
    
    async def main():
        f1 = asyncio.create_task(botrun())
        f2 = asyncio.create_task(redisrun())
        await f1
        await f2
    
    if __name__ == '__main__':
        asyncio.run(main())

    (bot) xxx@xxx:/home/bot/ldbot# python ldbotaio.py
    1
    Traceback (most recent call last):
      File "ldbotaio.py", line 60, in <module>
        asyncio.run(main())
      File "/usr/local/lib/python3.7/asyncio/runners.py", line 43, in run
        return loop.run_until_complete(main)
      File "/usr/local/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
        return future.result()
      File "ldbotaio.py", line 56, in main
        await f1
      File "ldbotaio.py", line 38, in botrun
        port=WEBAPP_PORT,
      File "/home/bot/ldbot/lib/python3.7/site-packages/aiogram/utils/executor.py", line 107, in start_webhook
        route_name=route_name)
      File "/home/bot/ldbot/lib/python3.7/site-packages/aiogram/utils/executor.py", line 78, in set_webhook
        executor.set_webhook(webhook_path, route_name=route_name, web_app=web_app)
      File "/home/bot/ldbot/lib/python3.7/site-packages/aiogram/utils/executor.py", line 289, in set_webhook
        self.loop.run_until_complete(self._startup_webhook())
      File "/usr/local/lib/python3.7/asyncio/base_events.py", line 571, in run_until_complete
        self.run_forever()
      File "/usr/local/lib/python3.7/asyncio/base_events.py", line 526, in run_forever
        raise RuntimeError('This event loop is already running')
    RuntimeError: This event loop is already running
    Unclosed client session
    client_session: <aiohttp.client.ClientSession object at 0x2aaf3f3c3a58>
  • Как соединить redis и телеграм бота?

    Dr_Elvis
    @Dr_Elvis Автор вопроса, куратор тега Python
    shurshur, redis-py выглядит тем что нужно. Теперь осталось понять как одновременно запустить и бота и бесконечный цикл на SUBSCRIBE redis.
  • Как пройти цикл один раз?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    Дмитрий, return выйдет из функции совсем
  • Как пройти цикл один раз?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    Дмитрий, объясни что делает твой код? Вот что я вижу:
    Приходит какое то сообщение боту
    Ты делаешь цикл из 1(!!!) элемента
    Далее делаешь ещё один цикл из 1(!!!) элемента, причём используешь ту же переменную i
    Далее смотришь есть ли что то в списке(заметь, не в i, а просто в списке, а там по любому есть, так как ты это обозначил, да и цикл бы не начался если там было бы пусто)
    Если есть, то отправляешь сообщение и выходишь из второго цикла.
    Вот зачем это всё? Невозможно помочь, если код не имеет смысла. По коду у тебя просто всегда, на любое сообщение будет отправлен ответ. Так если это так, то зачем вообще циклы, списки и условия? То что я вижу твой код можно сократить до такого, будет тот же результат:
    @dp.message_handler(content_types=['text', 'photo', 'video', 'document'])
    async def send_msg(message:types.Message):
        await bot.send_message(message.chat.id, "Этот текст, видит пользователь, в группе.".format(message.from_user, bot.get_me()), disable_notification=True, disable_web_page_preview=True, parse_mode='html')
  • Какой метод срабатывает при добавлении бота в чат?

    Dr_Elvis
    @Dr_Elvis Автор вопроса, куратор тега Python
    shurshur, однако на нем уже написано штук 5 ботов )
    при start можно передать аргумент bot_token
  • Как получать данные с API корректно?

    Dr_Elvis
    @Dr_Elvis
    После знака вопроса начинаются параметры, которые разделены амперсандом. В свою очередь каждый параметр через знак равно передаёт значение
  • Как получать данные с API корректно?

    Dr_Elvis
    @Dr_Elvis
    Windyay, не пользовался этой api, но принцип get запросов везде одинаковый. В данном случае будет как то так
    "https://api.github.com/users/" + nickname + "/repos?per_page=30&page=2
  • Как получать данные с API корректно?

    Dr_Elvis
    @Dr_Elvis
    На скрине самый Нижний параметр. page
    Запрашиваешь первые 30, передав page=1, потом следующие 30, передав page=2 и т.д.
  • Как сделать временный мут Telegram Aiogram?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    Alexndrev, ой... у вас же Aiogram... не заметил. ссылки немного другие будут
    restrict_chat_member
    permissions
  • Как сделать временный мут Telegram Aiogram?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    Извиняюсь, забыл указать что еще нужен permissions
    Тут нужно указать какие права ты хочешь выставить пользователю.
  • Как сделать временный мут Telegram Aiogram?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    Alexndrev, можно.
    Если посмотреть документацию, то в методе restrict_chat_member есть параметры: chat_id, user_id, permissions и until_date. Последний как раз и отвечает когда будет мут снят.
    Там же в документации написано что параметр должен быть datetime. и есть ссылка на офф документацию python.
    Идем и смотрим туда.
    Чтобы указать текущее время нужно использовать datetime.datetime.now()
    Получается нам нужно взять время которое сейчас и прибавить к нему, как я понял 10 минут, или 600 секунд.
    Гуглим как прибавить время к текущему и получаем что нужно взять текущую дату и прибавить дельту, то есть:
    datetime.datetime.now() + datetime.timedelta(seconds=600)

    Теперь соединяем всё это в один вызов:
    await message.bot.restrict_chat_member(message.chat.id, message.reply_to_message.from_user.id, datetime.datetime.now() + datetime.timedelta(seconds=600))

    P.S.: только не забываем сделать в начале файла import datetime если еще не сделано.
  • Возможно ли это совместить?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    shurshur, да, действительно. нужно проверять прежде чем по памяти писать. спасибо за замечания, исправил.