telegram bot api镜像类,具有数据集驱动的sqlite数据库。

davtelepot的Python项目详细描述


达夫特利波特

这个项目使用类Bot方便地镜像了telegram bot api。

请注意,运行异步代码需要python3.5+。

检查Requirements.txt中的第三方依赖项。

查看help(Bot)了解详细信息。

项目文件夹

davtelepot/data文件夹

  • config.py包含配置设置(例如证书路径、本地主机、端口等)
  • passwords.py包含要被git忽略的机密信息(例如bot令牌)
  • *.db文件是bots使用的sqlite数据库
  • *.log:日志文件(在data/config.py模块中存储日志文件名和错误文件名)

examples文件夹

此文件夹包含对简单davtelepot.bot telegram bots的完整注释和准备运行示例。

用法

import sys

from davtelepot.bot import Bot

from data.passwords import my_token, my_other_token

long_polling_bot = Bot(token=my_token, database_url='my_db')
webhook_bot = Bot(token=my_other_token, hostname='example.com',
                  certificate='path/to/certificate.pem',
                  database_url='my_other_db')

@long_polling_bot.command('/foo')
async def foo_command(bot, update, user_record):
    return "Bar!"

@webhook_bot.command('/bar')
async def bar_command(bot, update, user_record):
    return "Foo!"

exit_state = Bot.run(
    local_host='127.0.0.5',
    port=8552
)
sys.exit(exit_state)

查看help(Bot)了解详细信息。

Webhook附加信息

要在webhook模式中运行bot,必须在bot实例化时提供hostnamecertificate,在调用Bot.run方法时提供local_hostport

  • 电报将在https://{hostname}/webhook/{tokens}/发送POST请求,使用certificate进行加密
  • aiohttp.web.Application服务器将在http://{local_host}:{port}上侦听更新

因此,需要一个反向代理将传入的请求传递给本地主机。

用于此目的的nginx反向代理示例

server{listen8553ssl;listen[::]:8553ssl;server_nameexample.comwww.example.com;location/telegram/{proxy_passhttp://127.0.0.5:8552/;}ssl_certificate/path/to/fullchain.pem;ssl_certificate_key/path/to/privkey.pem;}

这种情况下的python配置文件示例

# File data/config.py, gitignored and imported in main scripthostname="https://www.example.com:8553/telegram"certificate="/path/to/fullchain.pem"local_host="127.0.0.5"port=8552# Main scriptfromdata.configimporthostname,certificate,local_host,portfromdata.passwordsimportbot_tokenfromdavtelepot.botimportBotmy_bot=Bot(token=bot_token,hostname=hostname,certificate=certificate)# ...Bot.run(local_host=local_host,port=port)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用运行时从JAVA运行openssl命令?   不使用线程安全类(如AtomicInteger和SynchronizedList)的java ProducerConsumer问题   匹配字符串的java模式   在java中使用泛型接口作为返回类型   java将可能具有序列化JSON值的hashmap作为节点添加到JSON字符串中   Eclipse无法从Java8流推断正确的类型   java无法了解标准JButton的大小   java我能用一个循环优化这个函数吗(在第一种方法中)?   Apache CXF中基于WebSocket的java SOAP?   java想要运行奇偶和求和三步   矩阵上随机元素的java集值   java布尔相等:0==a,操作数顺序重要吗?   java Eclipse不会退出我的插件   java如何在spring的SOAP拦截器中获取HttpServletRequest和HttpServletResponse