forked from SergeSpinoza/telegram-smpp-sms-bot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
smsbot.py
63 lines (46 loc) · 1.96 KB
/
smsbot.py
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# -*- coding: utf-8 -*-
import re
import logging
import sys
import yaml
import urllib3
from urllib3.contrib.socks import SOCKSProxyManager
import smpplib
# import smpplib.gsm
# import smpplib.client
# import smpplib.consts
# Load config
with open("settings.yaml", 'r') as ymlfile:
cfg = yaml.safe_load(ymlfile)
# if you want to know what's happening
logging.basicConfig(level=cfg['log_level'])
# Bot var
bot_token = cfg['telegram']['bot_token']
channel_id = cfg['telegram']['channel_id']
# urllib3.contrib.pyopenssl.inject_into_urllib3()
if cfg['telegram']['proxy_enabled']:
proxy = SOCKSProxyManager(cfg['telegram']['proxy_host'], username=cfg['telegram']['proxy_login'],
password=cfg['telegram']['proxy_pass'])
else:
proxy = urllib3.PoolManager()
# Two parts, UCS2, SMS with UDH
# parts, encoding_flag, msg_type_flag = smpplib.gsm.make_parts(u'Привет мир!\n' * 10)
client = smpplib.client.Client(cfg['smpp_goip']['host'], cfg['smpp_goip']['port'])
sms_destination_num = cfg['smpp_goip']['sim_num']
def getPdu(pdu):
message_for_decode = pdu.message_payload
if pdu.short_message:
message_for_decode = pdu.short_message
russian_symbols_count = len(re.findall('[а-яё]', message_for_decode.decode('utf-16be', errors='ignore'), re.I))
sms = message_for_decode.decode()
if russian_symbols_count > 0:
sms = message_for_decode.decode('utf-16be', errors='ignore')
source_addr = pdu.source_addr.decode()
msg = "SMS to (%s) from (%s): %s" % (sms_destination_num, source_addr, sms)
proxy.request('POST', "https://api.telegram.org/bot" + bot_token + "/sendMessage",
fields={"chat_id": channel_id, "text": msg, "disable_web_page_preview": "true"}).read()
client.set_message_received_handler(getPdu)
client.connect()
client.bind_transceiver(system_id=cfg['smpp_goip']['system_id'], password=cfg['smpp_goip']['password'])
# Enters a loop, waiting for incoming PDUs
client.listen()