Tg���������������

Tg���������������

开发个tg机器人

玩了这么就tg,一直没去了解tg的机器人功能,今天心血来潮去看了下官方的api,花了一下午时间总算是把该机器人搭建起来了。

创建机器人

创建机器人不要太简单 直接在tg的搜索框里面@BotFather,要带有官方认证的 1. /start 2. /newbot 输入名字 3. 输入名字 4. 输入机器人用户名 5. 然后会给你API token 6. https://core.telegram.org/bot/getme查看是否创建机器人成功

机器人服务端开发

在tg官网介绍了一些常用的编程语言的关于tg的库,我们可以直接拿来使用,在这里我使用的是python语言来开发机器人的后端,使用的是那个star数比较少的异步库,因为看其它两个库比较啰嗦。所以我使用了这个库来实现。

根据这个库的文档,我们就开始写代码,首先就是考虑写一个简单的天气查询机器人。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

import logging
import ssl

import weather
from aiogram import Bot, Dispatcher, executor, types
from config import API_TOKEN
# 这里推荐在config.py配置文件或环境变量换取token,开源项目config.py不加入版本控制即可。
# API_TOKEN = '你的机器人token';
# 设置代理,因为本地开发,所以某些不可描述的事情...,如果你要部署到vps上则需要把这个本地代理服务器删除了。
PROXY_URL = 'http://127.0.0.1:8001';

# 配置日志
logging.basicConfig(level=logging.INFO)

# 初始化机器人和调度器

bot = Bot(API_TOKEN, proxy=PROXY_URL)
dp = Dispatcher(bot)

#处理/start和/help命令
@dp.message_handler(commands=['start','help'])
async def send_welcome(message: types.Message):
    """
    这个函数将会被回调,当客户端输入'/start'或者'/help'命令时
    """
    await message.reply("欢迎来到jacklov3的垃圾机器人\n,请问有什么可以帮助您的吗?")

#处理天气命令,天气的代码放在另一个文件下面了
@dp.message_handler(commands=['weather'])
async def re_weather(message: types.Message):
        if len(message.text)==8:
            await message.reply('你的用法好像有问题,应该是/weather 北京市')
        else:
            await message.reply(weather.get_weather(message.text.split()[1]))

# 处理上面解析不到的东西,返回
@dp.message_handler()
async def echo(message: types.Message):
    await bot.send_message(message.chat.id, '辣鸡,会不会用,返回给你:\t'+message.text)

#启动机器人服务
if __name__=='__main__':
    executor.start_polling(dp, skip_updates=True)

weather.py文件用来实现查询天气的功能,这样主文件只需添加各个功能命令的处理即可,比如你以后可以创建查快递啊,聊天功能啊等。进一步丰富。完美的一匹。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

import requests
from config.py import APPID
#这里我们使用openweathermap的天气api,免费的。如果不用api的话,那就要用爬虫来解决,那就要更多的一些操作了。
URL='http://api.openweathermap.org/data/2.5/weather?units=metric&APPID=%s&lang=zh_cn&q='%APPID


def get_weather(city):
        """
        根据输入的城市名获取天气
        :param city:
        :param length:
        :return:
        """
        r = requests.get(URL+city).json()
        if r['cod'] !=200 :
            return '哦豁,好像没有查到您要的信息,请从新检查输入的格式。'
        else:
            hello = '%s 当前的天气状况为:\n'%city
            coord = '\t经度:%s  纬度:%s\t\n'%(r['coord']['lon'],r['coord']['lat'])
            weather = '\t天气状况:%s  描述:%s\n'%(r['weather'][0]['main'],r['weather'][0]['description'])
            ma = '\t温度:%s  大气压力:%s  湿度:%s  最低温度:%s  最高温度:%s\n'%(r['main']['temp'],
                r['main']['pressure'],r['main']['humidity'],r['main']['temp_min'],r['main']['temp_max'])

            wind = '\t风速:%s\n'%(r['wind']['speed'])
            clouds = '\t云量:%s\n'%r['clouds']
            dt = '\t数据计算时间:%s\n'%r['dt']
            sys = '\t国家代码:%s  日出时间:%s  日落时间:%s'%(r['sys']['country'],r['sys']['sunrise'],r['sys']['sunset'])

            weather_now = hello+coord+weather+ma+wind+clouds+dt+sys
            return weather_now

if __name__ == '__main__':
    print(get_weather('杭州市'))

总结

tg机器人的开发还是比较简单的,关键在于你想提供的功能和使用的一些库是否简洁方便等,后面的功能就是类似的了,可以添加一些查快递啊,ip啊,文件转换,音乐,电影查找啥的。



Tags: published
September 01, 2019 at 07:40PM
Open in Evernote

评论

此博客中的热门博文

Telegram MTProto Proxy 介绍说明 – 开源代码|技术|教程资源|网络资源|首页不显示 – 如有乐享

监控FRPS端口并自动重启进程linux脚本_FRP教程_电脑博士

进阶Spring Boot(二)---Tomcat与Undertow 吞吐量对比 - 简书