This repository has been archived on 2024-02-09. You can view files and clone it, but cannot push or open issues or pull requests.
scel-buc/scripts/send_message.py

91 lines
3.0 KiB
Python
Executable File

#!/bin/env python3
# scel-buc - scripts to send and receive messages through a Telegram bot
# Copyright (C) 2023 bursa-pastoris
#
# This file is part of scel-buc.
#
# scel-buc is free software: you can redistribute it and/or modify it under the
# terms of the GNU Affero General Public License as published by the Free
# Software Foundation, version 3 of the License.
#
# scel-buc is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License
# along with scel-buc. If not, see <https://www.gnu.org/licenses/>.
import urllib.request, urllib.parse
import json
from datetime import datetime as dt
from constants import *
def write_msg(msg):
# If a name is registered for the sender it is used, otherwise a "name" is
# simulated with sender's Telegram ID
sender_name = USER
# Group log files are named after the group, single chat log files are
# named after the sender (be it registered or not)
chat_id = str(msg['chat']['id'])
if 'title' in msg['chat']:
# Chat is group chat.
# If a name is registered for the chat it is used, otherwise the group
# chat title from Telegram is used.
if chat_id in GROUP_NAMES:
file_id = f'GRP-{chat_id}-'+GROUP_NAMES[chat_id]
else:
file_id = f'GRP-{chat_id}-'+str(msg['chat']['title'])
elif chat_id in USER_NAMES:
# Chat is single chat with a registered user
file_id = f'SIN-{chat_id}-'+USER_NAMES[chat_id]
else:
# Chat is single chat with unregistered user
file_id = f'SIN-{chat_id}'
# Get message txt...
if 'text' in msg:
text = msg['text']
else:
text = '[unsupported message type]'
# ...and date.
time = dt.strftime(dt.utcfromtimestamp(msg['date']), '%Y-%m-%d %H:%M:%S')
# Write the message
message = f'[{time}] {sender_name}\n{text}\n'
with open(CHAT_PATH+file_id, 'a') as f:
f.write('\n')
f.write(message)
# Connect to Telegram API
with urllib.request.urlopen(f'https://api.telegram.org/bot{TOKEN}/getMe') as request:
data = json.loads(request.read())
bot = data['result']
bot_name = '@'+bot['username']
print(f'Sending message for {USER} from {bot_name}...')
# Send message
recipient = input('Recipient ID > ')
text = []
print('Message content. Hit Enter to confirm the line and Ctrl+D to confirm'
' the message.')
while True:
try:
l = input('> ')
except EOFError:
print()
break
text.append(l)
text = urllib.parse.quote('\n'.join(text))
with urllib.request.urlopen(f'https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={recipient}&text={text}') as request:
data = json.loads(request.read())
if not data['ok']:
print("Error {data['error_code']: {data['decription']}")
else:
print('Sent')
write_msg(data['result'])