An elegant mirai-api-http v2 Python SDK.

Overview

Ariadne

Licence PyPI PyPI - Python Version Code style: black Imports: isort


一个适用于 mirai-api-http v2 的 Python SDK。

本项目适用于 mirai-api-http 2.0 以上版本

目前仍处于开发阶段,内部接口可能会有较大的变化。

安装

poetry add graia-ariadne

pip install graia-ariadne

鸣谢&相关项目

这些项目也很棒, 去他们的项目页看看, 点个 Star 以鼓励他们的开发工作, 毕竟没有他们也没有 Ariadne.

特别感谢 mamoe 给我们带来这些精彩的项目:

  • mirai: 一个高性能, 高可扩展性的 QQ 协议库
  • mirai-console: 一个基于 mirai 开发的插件式可扩展开发平台
  • mirai-api-http: 为本项目提供与 mirai 交互方式的 mirai-console 插件

GraiaProject 的其他项目:

  • Broadcast Control: 扩展性强大, 模块间低耦合, 高灵活性的事件系统支持,是 Ariadne 的底层。兼容
  • Components: 简单的消息链元素选择器 不兼容,将提供移植
  • Template: 消息模板 不兼容,将提供移植
  • Saya 间接但简洁的模块管理系统. 兼容
  • Scheduler: 简洁的基于 asyncio 的定时任务实现. 兼容
  • Application (a.k.a v4): 本项目的结构基础,支持 mirai-api-http v1.x 版本 。不完全兼容,建议参照项目内实现名称进行移植工作
  • Avilla (a.k.a v5): 下一代即时通讯框架。The Future不兼容

Ariadne 在开发中还参考了如下项目:

许可证

GNU AGPLv3 是本项目的开源许可证.

Comments
  • [Bug] Adapter 无报错无限重启

    [Bug] Adapter 无报错无限重启

    使用中遇到的问题

    ~~Adapter 无报错无限重启~~
    (经检查是个人问题,误打误撞发现了日志输出信息不够的另一个潜在问题,感谢 BlueGlassBlock 耐心指导)

    运行环境

    • Windows 11 (22000.282)
    • Python 3.10.0 x64

    依赖版本

    • aiohttp 3.7.4.post0
    • graia-ariadne 0.2.2
    • graia-broadcast 0.13.1
    • pydantic 1.8.2

    所用的代码

    import asyncio
    
    from graia.ariadne.adapter import DefaultAdapter
    from graia.ariadne.app import Ariadne
    from graia.ariadne.message.chain import MessageChain
    from graia.ariadne.message.element import Plain
    from graia.ariadne.model import Friend, MiraiSession
    from graia.broadcast import Broadcast
    
    loop = asyncio.new_event_loop()
    
    bcc = Broadcast(loop=loop)
    app = Ariadne(
            broadcast=bcc,
            adapter=DefaultAdapter(
                    bcc,
                    MiraiSession(
                            host='http://localhost:8080',  # noqa # 填入 httpapi 服务运行的地址
                            account=********,  # 你的机器人的 qq 号
                            verify_key='********'  # 填入 verifyKey
                    ),
            ),
    )
    
    
    @bcc.receiver("FriendMessage")
    async def friend_message_listener(app: Ariadne, friend: Friend):
        await app.sendFriendMessage(friend, MessageChain.create([Plain("Hello, World!")]))
    
    
    try:
        loop.run_until_complete(app.lifecycle())
    except KeyboardInterrupt:
        loop.run_until_complete(app.stop())
    

    控制台输出

    此处为手动结束,不结束则一直重复下去

    image

    bug good first issue 
    opened by Redlnn 9
  • :tada: 0.7.0

    :tada: 0.7.0

    更改说明 参见 #124

    向后兼容性 破坏性更改

    • [x] MessageChain: Amnesia implementation
    • [x] GraiaProject/Amnesia#8
    • [x] Switch to snake_case on default
    • [x] ariadne.connection: AbstractRouter ~Amnesia 那边咕咕了~
    opened by BlueGlassBlock 7
  • [Bug] NudgeEvent

    [Bug] NudgeEvent

    问题 当陌生人触发戳一戳事件的时候,会因为没有陌生人的戳一戳事件而报错,导致程序意外停止 如何复现 陌生人在没有添加bot时通过群聊进行临时会话,直接进行戳一戳 预期行为 添加陌生人的触发事件

    Ariadne version: 0.4.9 Broadcast version: 0.14.4 Scheduler version: Not Installed Saya version: Not Installed

    错误信息: pydantic.error_wrappers.ValidationError: 1 validation error for NudgeEvent context_type unexpected value; permitted: 'friend', 'group', None (type=value_error.const; given=stranger; permitted=('friend', 'group', None))

    bug 
    opened by YUASDS 6
  • ModuleNotFoundError: No module named 'graia'

    ModuleNotFoundError: No module named 'graia'

    问题 运行文件的时候出现了ModuleNotFoundError: No module named 'graia' 但我已经安装了graia包 如何复现 如何复现错误.

    预期行为 你希望如何更改/原本应该是怎样的.

    使用环境:

    • 系统: Windows 10
    • MAH 版本:
    • Ariadne 版本: 0.5.3.post3
    • Python 版本: 3.10.2
    • 其他 Graia 库版本:
    • 其他 有关 库版本:

    日志/截图 将任何有关的日志/截图放到这里(控制台输出/MAH 输出/...) image image

    bug invalid 
    opened by lingtian152 5
  • 💡add skip_for_unmatch arg

    💡add skip_for_unmatch arg

    更改说明 加入一个kwonly的参数 skip_for_unmatch, 默认为True 该参数为True时, 若当前Alconna解析失败, 会抛出ExecutionStop

    向后兼容性 当skip_for_unmatch为False时, 解析结果依然会被分配给事件监听器. 届时可能会出现一个命令发出导致多个事件监听器被调用

    opened by RF-Tar-Railt 3
  • [Feature]提供预设Interrupt

    [Feature]提供预设Interrupt

    使用场景. 在需要较为简单的中断的时候

    你想要的解决方案 跟V4一样的中断预设

    是否已有相关实现 https://github.com/GraiaProject/Application/blob/master/src/graia/application/interrupts.py

    其他内容 你认为重要的其他内容。

    enhancement 
    opened by I-love-study 3
  • ValueError: Invalid stage transition: finished -> blocking

    ValueError: Invalid stage transition: finished -> blocking

    问题

    在启动时报错.

    已多次检查mirai以及mirai-api-http的配置,并使用不同版本的py尝试运行,且更新了框架,仍无法解决问题. 也无法在日志中找出问题的关键. 看了closed的issue无果(如果是我看漏了拜托指个路)

    (曾经可以在此环境下运行)

    使用环境:

    • 系统:
    • MAH 版本: 请原谅我不知道什么是mah,如果是mirai的话,版本应该是:2.13.2
    • Ariadne 版本: 0.10.2
    • Python 版本: 3.9.13
    • 其他 Graia 库版本:
      • graia-amnesia 0.7.1
      • graia-ariadne 0.10.2
      • graia-broadcast 0.19.1
      • graia-saya 0.0.17
      • graia-scheduler 0.1.4
    • 其他 有关 库版本:
      • mirai-api-http-2.6.2
      • mcl-addon-2.1.1
    • 系统版本: windows server 2012r2

    日志/截图 日志:

    Microsoft Windows [版本 6.3.9600]
    (c) 2013 Microsoft Corporation。保留所有权利。
    
    C:\Users\Administrator\Desktop\QMGR\bot>python bot.py
    
    C:\Users\Administrator\Desktop\QMGR\bot>C:\Users\Administrator\AppData\Local\Pro
    grams\Python\Python39\python bot.py
    2023-01-03 20:50:06.938 | INFO     | launart.manager:launch_blocking:480 - Start
    ing launart main task...
    2023-01-03 20:50:06.938 | INFO     | launart.manager:launch:333 - Launching 5 co
    mponents as async task...
    2023-01-03 20:50:07.000 | INFO     | graia.ariadne.service:base_telemetry:144 -
    
        _         _           _
       / \   _ __(_) __ _  __| |_ __   ___
      / _ \ | '__| |/ _` |/ _` | '_ \ / _ \
     / ___ \| |  | | (_| | (_| | | | |  __/
    /_/   \_\_|  |_|\__,_|\__,_|_| |_|\___|
    
    graia-amnesia: 0.7.1
    graia-ariadne: 0.10.2
    graia-broadcast: 0.19.1
    launart: 0.6.2
    statv: 0.3.2
    2023-01-03 20:50:07.000 | INFO     | launart.manager:_launchable_task_done_callback:68 - [elizabeth.connection.3520295800.http_client_connection] completed.
    2023-01-03 20:50:07.000 | SUCCESS  | launart.manager:launch:385 - Layer #1:[cache.client/memcache, http.client/aiohttp] preparation completed.
    2023-01-03 20:50:07.000 | SUCCESS  | launart.manager:launch:385 - Layer #3:[elizabeth.service] preparation completed.
    2023-01-03 20:50:07.000 | INFO     | launart.manager:launch:390 - All components prepared, start blocking phase.
    2023-01-03 20:50:07.000 | ERROR    | launart.manager:_launchable_task_done_callback:43 - [elizabeth.connection.3520295800.websocket_client_connection] raised aexception.
    Traceback (most recent call last):
    
    > File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\graia\ariadne\connection\ws.py", line 178, in launch
        async with self.stage("blocking"):
                   │    └ <function Launchable.stage at 0x00000061039B31F0>
                   └ <WebsocketClientConnection <ConnectionStatus connected=False alive=False verified=False stage=finished> with 2 callbacks>
    
      File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\contextlib.py", line 181, in __aenter__
        return await self.gen.__anext__()
                     │    │   └ <slot wrapper '__anext__' of 'async_generator' objects>
                     │    └ <async_generator object Launchable.stage at 0x0000006104B8E550>
                     └ <contextlib._AsyncGeneratorContextManager object at 0x0000006104D86790>
    
      File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\launart\component.py", line 154, in stage
        self.status.stage = "blocking"
        │    │      └ <statv.Stats object at 0x00000061039CB1F0>
        │    └ <ConnectionStatus connected=False alive=False verified=False stage=finished>
        └ <WebsocketClientConnection <ConnectionStatus connected=False alive=False verified=False stage=finished> with 2 callbacks>
    
      File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\statv.py", line 67, in __set__
        value = self._validator(self, past_value, value)
                │    │          │     │           └ 'blocking'
                │    │          │     └ 'finished'
                │    │          └ <statv.Stats object at 0x00000061039CB1F0>
                │    └ <function LaunchableStatus._ at 0x00000061039C0A60>
                └ <statv.Stats object at 0x00000061039CB1F0>
    
      File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\launart\component.py", line 79, in _
        raise ValueError(f"Invalid stage transition: {past} -> {current}")
    
    ValueError: Invalid stage transition: finished -> blocking
    

    程序:

    from graia.ariadne.event.message import GroupMessage
    from graia.ariadne.app import Ariadne
    from graia.ariadne.entry import config
    from graia.ariadne.message.chain import MessageChain
    from graia.ariadne.model import Group
    
    app = Ariadne(
        config(
            verify_key="ServiceVerifyKey",  # 填入 VerifyKey
            account='原本是qq号',  # 你的机器人的 qq 号
        ),
    )
    
    
    @app.broadcast.receiver(GroupMessage)
    async def friend_message_listener(app: Ariadne, msg: MessageChain, group: Group):
        if group.id == '原本是群号':
            await app.send_message(group, "test")
    
    
    app.launch_blocking()
    

    配置文件:

    # file: "MCL/config/net.mamoe.mirai-api-http/setting.yml"
    ## 配置文件中的值,全为默认值
    
    ## 启用的 adapter, 内置有 http, ws, reverse-ws, webhook
    adapters:
      - http
      - ws
    
    ## 是否开启认证流程, 若为 true 则建立连接时需要验证 verifyKey
    enableVerify: true
    verifyKey: ServiceVerifyKey
    
    ## 开启一些调试信息
    debug: false
    
    ## 是否开启单 session 模式, 不建议开启
    singleMode: false
    
    ## 历史消息的缓存大小
    ## 同时,也是 http adapter 的消息队列容量
    cacheSize: 4096
    
    ## adapter 的单独配置,键名与 adapters 项配置相同
    ## 注意: 如果 mirai 读取配置时出错可以尝试删除并重新写入
    adapterSettings:
      ## HTTP 服务的主机, 端口和跨域设置
      http:
        host: localhost
        port: 8080
        cors: ["*"]
    
      ## Websocket 服务的主机, 端口和事件同步ID设置
      ws:
        host: localhost
        port: 8080
        reservedSyncId: -1
    
    bug 
    opened by hsn8086 2
  • ariadne无法连接到mirai

    ariadne无法连接到mirai

    mirai连接失败

    如何复现 按照mirai正常配置后启动:

    2022-12-08 13:16:46 I/http adapter: >>> [http adapter] is listening at http://localhost:8080
    2022-12-08 13:16:46 I/Mirai HTTP API: Http api server is running with verifyKey: 12345678
    2022-12-08 13:16:46 I/Mirai HTTP API: adaptors: [http]
    2022-12-08 13:16:46 I/Mirai HTTP API: ********************************************************
    2022-12-08 13:16:46 W/stderr: ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
    2022-12-08 13:16:47 I/Soyuz: iTXTech Soyuz is listening on ws://localhost:9876
    2022-12-08 13:16:47 I/MCL Addon: iTXTech MCL Version: 2.1.2-61c8bd8
    2022-12-08 13:16:47 I/main: 3 plugin(s) enabled.
    2022-12-08 13:16:47 I/WindowHelperJvm: Mirai 正在使用桌面环境. 如遇到验证码将会弹出对话框. 可添加 JVM 属性 `mirai.no-desktop` 以关闭.
    2022-12-08 13:16:47 I/WindowHelperJvm: Mirai is using desktop. Captcha will be thrown by window popup. You can add `mirai.no-desktop` to JVM properties (-Dmirai.no-desktop) to disable it.
    2022-12-08 13:16:47 I/main: Auto-login 2633865252, protocol: ANDROID_PHONE, heartbeatStrategy: STAT_HB
    2022-12-08 13:16:47 I/Bot.2633865252: Loaded account secrets from local cache.
    2022-12-08 13:16:48 I/Bot.2633865252: Saved account secrets to local cache for fast login.
    2022-12-08 13:16:48 I/Bot.2633865252: Login successful.
    2022-12-08 13:16:49 V/Bot.2633865252: Event: BotOnlineEvent(bot=Bot(2633865252))2022-12-08 13:16:49 I/Bot.2633865252: Bot login successful.
    2022-12-08 13:16:49 I/main: mirai-console started successfully.
    

    使用araidne连接

    from graia.ariadne.app import Ariadne
    from graia.ariadne.connection.config import config
    from graia.ariadne.model import Friend
    
    app = Ariadne(config(verify_key="12345678", account=2633865252))
    
    
    @app.broadcast.receiver("FriendMessage")
    async def friend_message_listener(app: Ariadne, friend: Friend):
        await app.send_message(friend, "Hello, World!")
    
    Ariadne.launch_blocking()
    

    然后报错:

    graia-broadcast: 0.19.0
    launart: 0.6.1
    statv: 0.3.2
    2022-12-08 13:22:36.420 | INFO     | launart.manager:_launchable_task_done_callback:59 - [elizabeth.connection.2633865252.http_client_connection] completed.
    2022-12-08 13:22:36.421 | SUCCESS  | launart.manager:launch:351 - Layer #1:[http.client/aiohttp, cache.client/memcache] preparation completed.
    2022-12-08 13:22:36.421 | SUCCESS  | launart.manager:launch:351 - Layer #3:[elizabeth.service] preparation completed.
    2022-12-08 13:22:36.421 | INFO     | launart.manager:launch:356 - All components prepared, start blocking phase.
    2022-12-08 13:22:38.533 | ERROR    | graia.amnesia.builtins.aiohttp:connection_manage:231 - 404, message='Invalid response status', url=URL('http://localhost:8080/all?qq=2633865252&verifyKey=12345678')
    Traceback (most recent call last):
    
      File "C:\Users\lzq\PycharmProjects\pythonProject\chatgpt-mirai-qq-bot-master\test.py", line 13, in <module>
    
    invalid 
    opened by freehugr 2
  • ImportError: cannot import name 'adapter_ctx' from 'graia.ariadne.context'

    ImportError: cannot import name 'adapter_ctx' from 'graia.ariadne.context'

    问题

    小弟不才,移植了个人写的项目之后发现adapter_ctx的Import error,重装MCL和graia-ariadne都试过了,还是如此。

    使用环境:

    • 系统:
    • Ariadne 版本:graia_ariadne-0.7.18-py3-none-any.whl
    • Python 版本:3.105

    日志 PS C:\Users\Administrator\Desktop\bot> python .\main.py Traceback (most recent call last): File "C:\Users\Administrator\Desktop\bot\main.py", line 8, in from graia.ariadne.context import adapter_ctx ImportError: cannot import name 'adapter_ctx' from 'graia.ariadne.context' (C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\graia\ariadne\context.py)

    invalid wontfix 
    opened by bakaEC 2
  • [Feature] 0.7.0 auto-port tool

    [Feature] 0.7.0 auto-port tool

    使用场景 0.7.0 的自动迁移工具

    你想要的解决方案utils/convert.py 给出 使用 ast 模块解析用户的调用,并自动替换 用户执行 convert.py <directory_or_file> 即可

    其他内容 See #156

    • [x] 修复 MessageChain 部分调用
    • [x] 修复 camelCase
    • [x] 对 Adapterget_running 发出警告
    • [x] 提供更好的警告高亮
    • [x] 支持不同的输出方式
    enhancement 
    opened by BlueGlassBlock 2
  • :arrow_up:(deps): Bump fastapi from 0.76.0 to 0.77.1

    :arrow_up:(deps): Bump fastapi from 0.76.0 to 0.77.1

    Bumps fastapi from 0.76.0 to 0.77.1.

    Release notes

    Sourced from fastapi's releases.

    0.77.1

    Upgrades

    Docs

    • 📝 Add link to german article: REST-API Programmieren mittels Python und dem FastAPI Modul. PR #4624 by @​fschuermeyer.
    • 📝 Add external link: PyCharm Guide to FastAPI. PR #4512 by @​mukulmantosh.
    • 📝 Add external link to article: Building an API with FastAPI and Supabase and Deploying on Deta. PR #4440 by @​aUnicornDev.
    • ✏ Fix small typo in docs/en/docs/tutorial/security/first-steps.md. PR #4515 by @​KikoIlievski.

    Translations

    Internal

    0.77.0

    Upgrades

    • ⬆ Upgrade Starlette from 0.18.0 to 0.19.0. PR #4488 by @​Kludex.
      • When creating an explicit JSONResponse the content argument is now required.

    Docs

    • 📝 Add external link to article: Seamless FastAPI Configuration with ConfZ. PR #4414 by @​silvanmelchior.
    • 📝 Add external link to article: 5 Advanced Features of FastAPI You Should Try. PR #4436 by @​kaustubhgupta.
    • ✏ Reword to improve legibility of docs about TestClient. PR #4389 by @​rgilton.
    • 📝 Add external link to blog post about Kafka, FastAPI, and Ably. PR #4044 by @​Ugbot.
    • ✏ Fix typo in docs/en/docs/tutorial/sql-databases.md. PR #4875 by @​wpyoga.
    • ✏ Fix typo in docs/en/docs/async.md. PR #4726 by @​Prezu.

    Translations

    • 🌐 Update source example highlights for docs/zh/docs/tutorial/query-params-str-validations.md. PR #4237 by @​caimaoy.
    • 🌐 Remove translation docs references to aiofiles as it's no longer needed since AnyIO. PR #3594 by @​alonme.
    • ✏ 🌐 Fix typo in Portuguese translation for docs/pt/docs/tutorial/path-params.md. PR #4722 by @​CleoMenezesJr.
    • 🌐 Fix live docs server for translations for some languages. PR #4729 by @​wakabame.
    • 🌐 Add Portuguese translation for docs/pt/docs/tutorial/cookie-params.md. PR #4112 by @​lbmendes.
    • 🌐 Fix French translation for docs/tutorial/body.md. PR #4332 by @​Smlep.
    • 🌐 Add Japanese translation for docs/ja/docs/advanced/conditional-openapi.md. PR #2631 by @​sh0nk.
    • 🌐 Fix Japanese translation of docs/ja/docs/tutorial/body.md. PR #3062 by @​a-takahashi223.
    • 🌐 Add Portuguese translation for docs/pt/docs/tutorial/background-tasks.md. PR #2170 by @​izaguerreiro.
    • 🌐 Add Portuguese translation for docs/deployment/deta.md. PR #4442 by @​lsglucas.
    • 🌐 Add Russian translation for docs/async.md. PR #4036 by @​Winand.

    ... (truncated)

    Commits
    • 2aaac14 🔖 Release version 0.77.1
    • 03cbdd4 📝 Update release notes
    • a7e659e 📝 Update release notes
    • 350745c 🌐 Add Polish translation for docs/pl/docs/tutorial/index.md (#4516)
    • d0e4015 📝 Update release notes
    • b1e6910 ✏ Fix typo in deployment (#4629)
    • 9b4e675 📝 Update release notes
    • 8082b45 📝 Update release notes
    • 86c459d 🌐 Add Portuguese translation for docs/pt/docs/help-fastapi.md (#4583)
    • 2a91ee9 📝 Add link to german article: REST-API Programmieren mittels Python und dem F...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • [Feature] 通用的 help 解决方案

    [Feature] 通用的 help 解决方案

    使用场景

    通过一个统一的方式注册help菜单,然后通过特定的格式输出

    你想要的解决方案

    例如使用类似:

    @help.register("name1")
    @channel.use(
        ListenerSchema(
            listening_events=[FriendMessage],
            inline_dispatchers=[
                Twilight(
                    [FullMatch("添加管理员"), "adminid" @ WildcardMatch(optional=True)],
                )
            ],
        )
    )
    
    ...
    
    @help.register("name1")
    @channel.use(
        ListenerSchema(
            listening_events=[FriendMessage],
            inline_dispatchers=[
                Twilight(
                    [FullMatch("添加黑名单"), "userid" @ WildcardMatch(optional=True)],
                )
            ],
        )
    )
    
    ...
    
    @help.register("name2")
    @channel.use(
        ListenerSchema(
            listening_events=[FriendMessage],
            inline_dispatchers=[
                Twilight(
                    [FullMatch("查看状态")],
                )
            ],
        )
    )
    
    
    >> print(help.gen_help())
    
    1. name1
       添加管理员 <adminid>
       添加黑名单 <userid>
    
    2. name2
       查看状态
    

    大概就是这样的实现(? 当然只是举个例子,实际应该不会这么草率

    enhancement 
    opened by djkcyl 6
Releases(v0.10.3)
Owner
Graia Project
Creation & Exploration
Graia Project
Track live sentiment for stocks from Reddit and Twitter and identify growing stocks

Market Sentiment About This repository can mainly be used for two things. a. Tracking the live sentiment of stocks from Reddit and Twitter b. Tracking

Market Sentiment 345 Dec 17, 2022
Feedback-TelegramBot is a resemblance bot which can be deployed on server

Feedback-TelegramBot Feedback-TelegramBot is a resemblance bot which can be deployed on server This work is based on Telegram library, thanks to their

2 Jan 03, 2022
A Telegram Bot which will ask new Group Members to verify them by solving an emoji captcha.

Emoji-Captcha-Bot A Telegram Bot which will ask new Group Members to verify them by solving an emoji captcha. About API: Using api.abirhasan.wtf/captc

Abir Hasan 52 Dec 11, 2022
This is Telegram Files Store Bot by @AbirHasan2005

PyroFilesStoreBot This is Telegram Parmanent Files Store Bot by @AbirHasan2005. Language: Python3 Library: Pyrogram Features: In PM Just Forward or Se

Abir Hasan 168 Dec 19, 2022
Chorok - High quality Discord music bot

Chorok - High quality Discord music bot Rewrite with dico Config guide

Chorok Opensource project 10 May 03, 2022
自用直播源集合,附带检测与分类功能。

myiptv 自用直播源集合,附带检测与分类功能。 为啥搞 TLDR: 太闲了。 自己有收集直播源的爱好,和录制直播源的需求。 一些软件自带的直播源太过难用。 网上现有的直播源太杂,且缺乏检测。 一些大源缺乏持续更新,如 iptv-org。 使用指南与 TODO 每次进行大更新后都会进行一次 rel

abc1763613206 171 Dec 11, 2022
CyberTKR - CyberTK-API

CyberTKR - CyberTK-API

TKR 2 Apr 08, 2022
Auto-Rollnumber-sender - Auto Rollnumber sender with python

Auto-Rollnumber-sender The above code fits better on my system but it can vary s

Riya Tripathi 2 Feb 14, 2022
A multi-tenant multi-client scalable product categorising demo stack

Better Categories 4All: A multi-tenant multi-client product categorising stack The steps to reproduce training and inference are in the end of this fi

7 Feb 15, 2022
CryptoApp - Python code to pull wallet balances from a variety of different chains through nothing other than your public key.

CryptoApp - Python code to pull wallet balances from a variety of different chains through nothing other than your public key.

Zach Frank 4 Dec 13, 2022
Template to create a telegram bot in python

Template for Telegram Bot Template to create a telegram bot in python. How to Run Set your telegram bot token as environment variable TELEGRAM_BOT_TOK

PyTopia 10 Mar 07, 2022
Simple Telegram Bot to Download and Upload Files From Mega.nz

Mega.nz-Bot Simple Telegram Bot to Download Files From Mega.nz and Upload It to Telegram Features All Mega.nz File Links supported No login required A

I'm Not A Bot #Left_TG 245 Jan 01, 2023
This repository provides a set functions to extract paragraphs from AWS Textract responses.

extract-paragraphs-with-aws-textract Since AWS Textract (the AWS OCR service) does not have a native function to extract paragraphs, this repository p

Juan Anzola 3 Jan 26, 2022
Um simples bot escrito em Python usando a lib pyTelegramBotAPI

Telegram Bot Python Um simples bot escrito em Python usando a lib pyTelegramBotAPI Instalação Windows: Download do Python 3 Aqui Download do ZIP do Có

Sr_Yuu 1 May 07, 2022
Tools for use in DeFi. Impermanent Loss calculations, staking and farming strategies, coingecko and pancakeswap API queries, liquidity pools and more

DeFi open source tools Get Started Instalation General Tools Impermanent Loss, simple calculation Compare Buy & Hold with Staking and Farming Complete

Juan Pablo Pisano 467 Jan 08, 2023
pymobiledevice fork with more recent coding standards and many more features

Description Features Installation Usage Sending your own messages Lockdown messages Instruments messages Example Lockdown services com.apple.instrumen

255 Dec 28, 2022
Python client library for Postmark API

Postmarker Python client library for Postmark API. Gitter: https://gitter.im/Stranger6667/postmarker Installation Postmarker can be obtained with pip:

Dmitry Dygalo 109 Dec 13, 2022
Using multiple API sources, create an app that allows users to filter through random locations based on their temperature range choices.

World_weather_analysis Overview Using multiple API sources, create an app that allows users to filter through random locations based on their temperat

Jason Boyer 2 Sep 16, 2022
Telegram Bot for everyday raffles

SpinEverydayBot v2 Telegram bot for everyday raffles. HIGHLY EXPERIMENTAL! WORK IN PROGRESS! Setting up Requirements Python 3.9+ PostgreSQL 13+ Older

evgfilim1 18 Dec 20, 2022