Telegram Client 开发
最编程
2024-08-12 17:24:02
...
可查阅telegram文档
安装
pip3 install --upgrade telethon
到https://my.telegram.org/用手机号登录这个网址申请api
申请成功后保存好api_id和api_hash
连接客户端
from telethon import TelegramClient, sync
import socks
# Use your own values here
api_id = 12345
api_hash = '0123456789abcdef0123456789abcdef'
client = TelegramClient('some_name'
api_id,
api_hash,
proxy=(socks.SOCKS5, 'localhost', 4444) #代理设置
).start()
#此处的some_name是一个随便起的名称,第一次运行会让你输入手机号和验证码,之后会生成一个some_name.session的文件,再次运行的时候就不需要反复输入手机号验证码了
myself = client.get_me()
print(myself) #测试是否连接
引入的包
from telethon import TelegramClient, sync,events
import logging
import random
import asyncio
import telethon
from telethon.tl.types import PeerUser, PeerChat, PeerChannel,UpdateNewChannelMessage
from telethon.tl.functions.messages import SendMessageRequest
from telethon.tl import types, functions
from telethon import utils
连接
api_id = 12345
api_hash = '0123456789abcdef0123456789abcdef'
client = TelegramClient('some_name'
api_id,
api_hash,
proxy=(socks.SOCKS5, 'localhost', 4444) #代理设置
).start()
给自己发送一条消息/文件
client.send_message('me', 'Hello! Talking to you from Telethon')
client.send_file('me', '/home/shanghaimei/Pictures/images.png')
获取自己发送的上一条信息
messages = client.get_messages('me')#可更改用户名
print(messages[0].text)
可以自定义聊天
@client.on(events.NewMessage)
async def my_event_handler(event):
if 'hello' in event.raw_text:
await event.reply('hi!')
if 'what' and 'name' in event.raw_text:
await event.reply('Haimei_bot,Thanks!')
某个人的信息
peer = client.get_input_entity('@HuingZM')#可更换用户名
peer = utils.get_input_peer(peer)
print(peer)
打印信息#InputPeerUser(user_id=1234556, access_hash=-5728264861981944)
给特定的人和频道发送信息
result = client(SendMessageRequest('HuingZM', 'Hello there!'))
result = client(SendMessageRequest(PeerChannel(1182116619), 'Hello there!'))
print(result)
打印群信息
dialogs = client.get_dialogs()
# 打印群信息
print(client.get_entity("@hello")) #可更换群组名
打印频道信息
my_channel = client.get_entity(dialog.title)
print(my_channel)
获取全部的聊天信息
for message in client.iter_messages(1182116619):
print(message)
判断列表信息
for dialog in client.iter_dialogs():
friend_info = client.get_entity(dialog.title) #dialog.title为first_name
if type(friend_info) is not telethon.tl.types.User:
channel_id = friend_info.id
channel_title = friend_info.title
channel_username = friend_info.username
dict_channel_info = {"channel_id":channel_id,"channel_title":channel_title,"channel_username":channel_username}
print(dialog.title,"这是一个频道",dict_channel_info)
else:
if friend_info.bot is False:
user_id = friend_info.id
user_name = friend_info.username
is_bot = friend_info.bot
user_phone = friend_info.phone
dict_user_info = {'user_id':user_id,'user_name':user_name,'user_phone':user_phone,'is_bot':is_bot}
print(dialog.title,"这是一个用户",dict_user_info)
else:
bot_id = friend_info.id
bot_name = friend_info.username
is_bot = friend_info.bot
dict_bot_info = {'bot_id':bot_id,'bot_name':bot_name,'is_bot':is_bot}
print(dialog.title,'这是一个机器人',dict_bot_info)
获取频道成员信息
from telethon.tl.functions.channels import GetParticipantsRequest
from telethon.tl.types import ChannelParticipantsSearch
from time import sleep
offset = 0
limit = 100
all_participants = []
while True:
participants = client(GetParticipantsRequest(
1387666944, ChannelParticipantsSearch(''), offset, limit, hash=0
))
if not participants.users:
break
all_participants.extend(participants.users)
for par in all_participants:
print(par)
邀请人进群组
from telethon.tl.functions.messages import AddChatUserRequest
client(AddChatUserRequest(
chat_id = -269442445 , #chat_id
user_id = 585015279 , #被邀请人id
fwd_limit=10 # Allow the user to see the 10 last messages
))
邀请人进频道
from telethon.tl.functions.channels import InviteToChannelRequest
client(InviteToChannelRequest(
channel=1182116619, #频道id
users = ['HuingZM'],#列表格式的username
))
获取频道成员信息并将成员加入自己的群组或频道,并加入欢迎语
for dialog in client.iter_dialogs():
friend_info = client.get_entity(dialog.title) #dialog.title为first_name
if type(friend_info) is not telethon.tl.types.User:
channel_id = friend_info.id
channel_title = friend_info.title
channel_username = friend_info.username
dict_channel_info = {"channel_id":channel_id,"channel_title":channel_title,"channel_username":channel_username}
# print(dialog.title,"这是一个频道",dict_channel_info)
channel = client.get_entity(PeerChannel(channel_id)) # 根据群组id获取群组对
responses = client.iter_participants(channel, aggressive=True) # 获取群组所有用户信息
for response in responses:
if response.username is not None:
d = {'id':response.id,'username':response.username}
print(d)
time.sleep(2)
client(InviteToChannelRequest(
channel=1219921340,
users = [d.get('username')],
))
client.send_message(1219921340,'''✨Welcome to <a href="https://t.me/haimei_group">BiBi's group</a> chat {} !'''.format(d.get('username')) ,parse_mode="html")
time.sleep(2) #防止出现UserPrivacyRestrictedError
转发信息
messages = client.get_messages('china_BiBi')#括号参数为来源频道username,因为要获取信息id
mes_id = messages[0].id
client.forward_messages(1219921340,mes_id,1182116619)
#第一个参数为目标频道id,第二个信息id,第三个来源频道id
实时转发信息
messages = client.get_messages('china_BiBi')
mes_id_1 = messages[0].id
while True:
messages = client.get_messages('china_BiBi')
mes_id = messages[0].id
if mes_id != mes_id_1:
client.forward_messages(1219921340,mes_id,1182116619)
mes_id_1 = mes_id
推荐阅读
-
使用Qt开发音视频应用:通过FFmpeg解码本地摄像头并转换yuv422为yuv420
-
Qt音视频开发28-通过FFmpeg解码本地摄像头的YUV422格式视频并转换为YUV420格式
-
快速开发了一个简易聊天室
-
国内开发工具的极限,绝佳项目助手!
-
Cloud Call Center的 400 电话怎么选号?到这一步下一步是干什么? -问答-阿里云开发者社区-阿里云
-
www.shijunheng.com 快一个月了,还在审核中。-问答-阿里云开发者社区-阿里云
-
JeecgBoot 2.1.1 代码生成器AI版本发布,基于SpringBoot+AntDesign的JAVA快速开发平台
-
码上公益低代码开发训练营 — 课时2:《低代码开发师初级认证课程》第三章 从线下审批到在线审批-课时2:《低代码开发师初级认证课程》第3章
-
重写的标题:C++开发的2048游戏
-
安卓开发报告:2048小游戏的Android版本开发报告