RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1595534
Accepted
SIMKA 333
SIMKA 333
Asked:2024-10-03 02:41:47 +0000 UTC2024-10-03 02:41:47 +0000 UTC 2024-10-03 02:41:47 +0000 UTC

如何编写python telegram bot日志以将所有消息输出到控制台

  • 772

这是我的代码:

from aiogram import Bot, types, Dispatcher, Router, F
from aiogram.filters import Command
import asyncio
import uuid
import json
import websockets


bot.polling(none_stop=True, interval=0)
token = 'токен бота' # Ваш токен бота взятый из @BotFather
runware_api = 'апи нейронки' # Тот самый ключик разработчиков для работы нейросети

bot = Bot(token=token)
dp = Dispatcher()
router = Router()

async def create_image(prompt): # Генерируем картинку
    async with websockets.connect('wss://ws-api.runware.ai/v1') as websocket:
        auth_request = [{"taskType": "authentication","apiKey": runware_api}]
        await websocket.send(json.dumps(auth_request)) # Логинимся и получаем успешный ответ от сервера
        auth_response = await websocket.recv()
        n = 1
        image_request = [{"positivePrompt": prompt,"model": "runware:100@1",'steps':4,'width':512,'height':512,'numberResults':n,'outputType':['URL'],'taskType':'imageInference','taskUUID':uuid.uuid4().hex}]
        await websocket.send(json.dumps(image_request)) # Отправляем запрос на генерацию и получаем картинку
        img = await websocket.recv()
        data = json.loads(img)['data'][0]
        return data

@router.message(Command('start')) # Добавляем ответ на команду /start
async def start(message: types.Message):
    await message.answer('Привет!\nЯ бот для моментальной генерации картинок, отправь мне на английском любой промпт и я в ту же секунду сгенерирую тебе изображение')

@router.message() # Ловим промпты
async def gen(message: types.Message):
    if not message.text:
        return await message.answer('Отправь мне запрос текстом, я не понимаю другие форматы :(')
    msg = await message.answer(f'Начинаю генерацию по запросу:\n\n{message.text}')
    image = await create_image(message.text)
    await message.answer_photo(image['imageURL'], caption=f'Вот ваша генерация по запросу:\n\n{message.text}')
    await bot.delete_messages(message.chat.id, [msg.message_id, message.message_id])

async def main():
    router.message.filter(F.chat.type == 'private')
    dp.include_router(router)
    await dp.start_polling(bot)

if __name__ == '__main__':
    print('Деньги уже текут')
    asyncio.run(main())
python
  • 1 1 个回答
  • 40 Views

1 个回答

  • Voted
  1. Best Answer
    wave_or_corpuscula
    2024-10-03T14:10:47Z2024-10-03T14:10:47Z

    据我了解,任务是确保发送到机器人的所有消息的文本都输出到控制台。听起来像是一个中间件任务。此外,中间件必须是外部的,以便消息首先进入其中,然后在处理程序中进行处理。

    您可以在官方文档中阅读有关中间件的内容。

    中间件代码如下所示:

    import logging
    
    from aiogram import BaseMiddleware
    from aiogram.types import Message
    
    from typing import Callable, Dict, Awaitable, Any
    
    # Создаем класс мидлвари, унаследованный от
    # aiogram'овского BaseMiddleware
    class MessageLogMiddleware(BaseMiddleware):
    
        async def __call__(
            self,
            handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
            event: Message,
            data: Dict[str, Any]
        ) -> Any:
            logging.info(event.text) # Выводим текст сообщения
            return await handler(event, data) # Возвращаем обновление хендлерам
    
    # Регистрируем внешнюю миддлварь
    dp.message.outer_middleware(MessageLogMiddleware())
    
    

    这是如何运作的?

    文档中有这张精彩的图片: 中间件专区

    它清楚地表明消息(或任何其他更新)首先到达外部中间件,在我们的例子中是MessageLogMiddleware。其参数类型handler指定为Callable[[Message, Dict[str, Any]], Awaitable[Any]]。这Message是我们想要捕获的更新类型(我们想要捕获消息)。

    当用户向机器人写入内容时,他的消息首先进入外部中间件(我们按照图片进行操作),然后通过过滤器进入简单的中间件,然后仅到达处理程序。

    我们在打开路由器之前注册中间件,即直到该行dp.include_router(router),您将看到所有消息输出到控制台。

    完整代码:

    import json
    
    import uuid
    
    import logging
    
    import websockets
    
    from typing import Callable, Dict, Awaitable, Any
    
    from aiogram import Bot, types, Dispatcher, Router, F, BaseMiddleware
    from aiogram.types import Message
    from aiogram.filters import Command
    
    
    bot.polling(none_stop=True, interval=0)
    token = 'токен бота'
    runware_api = 'апи нейронки'
    
    
    class MessageLogMiddleware(BaseMiddleware):
    
        async def __call__(
            self,
            handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
            event: Message,
            data: Dict[str, Any]
        ) -> Any:
            logging.info(event.text) # Выводим текст сообщения
            return await handler(event, data)
    
    
    bot = Bot(token=token)
    dp = Dispatcher()
    router = Router()
    
    
    async def create_image(prompt): # Генерируем картинку
        async with websockets.connect('wss://ws-api.runware.ai/v1') as websocket:
            auth_request = [{"taskType": "authentication","apiKey": runware_api}]
            await websocket.send(json.dumps(auth_request)) # Логинимся и получаем успешный ответ от сервера
            auth_response = await websocket.recv()
            n = 1
            image_request = [{"positivePrompt": prompt,"model": "runware:100@1",'steps':4,'width':512,'height':512,'numberResults':n,'outputType':['URL'],'taskType':'imageInference','taskUUID':uuid.uuid4().hex}]
            await websocket.send(json.dumps(image_request)) # Отправляем запрос на генерацию и получаем картинку
            img = await websocket.recv()
            data = json.loads(img)['data'][0]
            return data
    
    @router.message(Command('start')) # Добавляем ответ на команду /start
    async def start(message: types.Message):
        await message.answer('Привет!\nЯ бот для моментальной генерации картинок, отправь мне на английском любой промпт и я в ту же секунду сгенерирую тебе изображение')
    
    @router.message() # Ловим промпты
    async def gen(message: types.Message):
        if not message.text:
            return await message.answer('Отправь мне запрос текстом, я не понимаю другие форматы :(')
        msg = await message.answer(f'Начинаю генерацию по запросу:\n\n{message.text}')
        image = await create_image(message.text)
        await message.answer_photo(image['imageURL'], caption=f'Вот ваша генерация по запросу:\n\n{message.text}')
        await bot.delete_messages(message.chat.id, [msg.message_id, message.message_id])
    
    async def main():
        logging.basicConfig(level=logging.INFO) # Выставляем уровень логов на INFO
        dp.message.outer_middleware(MessageLogMiddleware())
        router.message.filter(F.chat.type == 'private')
        dp.include_router(router)
        await dp.start_polling(bot)
    
    if __name__ == '__main__':
        print('Деньги уже текут')
        asyncio.run(main())
    
    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5