Add broadcast command

This commit is contained in:
2023-11-19 00:27:51 +01:00
parent 88d33da92c
commit 971113e529
3 changed files with 53 additions and 31 deletions

View File

@ -12,6 +12,8 @@ TelegramAdmins = [ 123456789, ]
TelegramWhitelist = [ 123456789, ] TelegramWhitelist = [ 123456789, ]
TelegramRestrict = False TelegramRestrict = False
AdminIds = [ "123456789@telegram", "admin@activitypub@mastodon.example.com", ]
DefaultLang = 'en' DefaultLang = 'en'
Debug = False Debug = False
Dumper = False Dumper = False
@ -27,6 +29,7 @@ Endpoints = {
"source": cSource, "source": cSource,
"ping": cPing, "ping": cPing,
"echo": cEcho, "echo": cEcho,
"broadcast": cBroadcast,
#"repeat": cRepeat, #"repeat": cRepeat,
"wish": percenter, "wish": percenter,
"level": percenter, "level": percenter,

View File

@ -87,6 +87,17 @@ def cEcho(Context, Data=None) -> None:
else: else:
SendMsg(Context, {"Text": choice(Locale.__('echo.empty'))}) SendMsg(Context, {"Text": choice(Locale.__('echo.empty'))})
# Module: Broadcast
# Sends an admin message over to another destination
def cBroadcast(Context, Data=None) -> None:
if len(Data.Tokens) >= 3 and Data.User['Id'] in AdminIds:
Dest = Data.Tokens[1]
Text = ' '.join(Data.Tokens[2:])
SendMsg(Context, {"TextPlain": Text}, Dest)
SendMsg(Context, {"TextPlain": "Executed."})
else:
SendMsg(Context, {"Text": choice(Locale.__('eval'))})
#def cTime(update:Update, context:CallbackContext) -> None: #def cTime(update:Update, context:CallbackContext) -> None:
# update.message.reply_markdown_v2( # update.message.reply_markdown_v2(
# CharEscape(choice(Locale.__('time')).format(time.ctime().replace(' ', ' ')), 'MARKDOWN_SPEECH'), # CharEscape(choice(Locale.__('time')).format(time.ctime().replace(' ', ' ')), 'MARKDOWN_SPEECH'),

View File

@ -124,7 +124,7 @@ def CmdAllowed(update) -> bool:
return False return False
def HandleCmd(update): def HandleCmd(update):
filters(update) TelegramQueryHandle(update)
if CmdAllowed(update): if CmdAllowed(update):
return ParseCmd(update.message.text) return ParseCmd(update.message.text)
else: else:
@ -135,18 +135,23 @@ def GetRawTokens(Text:str) -> list:
def ParseCmd(Msg) -> dict: def ParseCmd(Msg) -> dict:
Name = Msg.lower().split(' ')[0][1:].split('@')[0] Name = Msg.lower().split(' ')[0][1:].split('@')[0]
if Name:
return SimpleNamespace(**{ return SimpleNamespace(**{
"Name": Name, "Name": Name,
"Body": Name.join(Msg.split(Name)[1:]).strip(), "Body": Name.join(Msg.split(Name)[1:]).strip(),
"Tokens": GetRawTokens(Msg), "Tokens": GetRawTokens(Msg),
"User": {"Name": "", "Tag": "", "Id": ""}, "User": {},
"Tagged": {}, "Tagged": {},
}) })
def filters(update:Update, context:CallbackContext=None) -> None: def TelegramQueryHandle(update:Update, context:CallbackContext=None) -> None:
if update and update.message:
Cmd = ParseCmd(update.message.text) Cmd = ParseCmd(update.message.text)
if Cmd.Tokens[0][0] in CmdPrefixes and Cmd.Name in Endpoints: if Cmd and Cmd.Tokens[0][0] in CmdPrefixes and Cmd.Name in Endpoints:
Endpoints[Cmd.Name](update, Cmd) Cmd.User['Name'] = 'null'
Cmd.User['Tag'] = 'null'
Cmd.User['Id'] = f'{update.message.from_user.id}@telegram'
Endpoints[Cmd.Name]({ "Event": update, "Manager": context }, Cmd)
if Debug and Dumper: if Debug and Dumper:
Text = update.message.text Text = update.message.text
Text = (Text.replace('\n', '\\n') if Text else '') Text = (Text.replace('\n', '\\n') if Text else '')
@ -200,7 +205,7 @@ def RandHexStr(Len:int) -> str:
def HttpGet(Url:str): def HttpGet(Url:str):
return urlopen(Request(Url, headers={"User-Agent": WebUserAgent})) return urlopen(Request(Url, headers={"User-Agent": WebUserAgent}))
def SendMsg(Context, Data): def SendMsg(Context, Data, Destination=None) -> None:
#Data: Text, Media, Files #Data: Text, Media, Files
if type(Context) == dict: if type(Context) == dict:
Event = Context['Event'] if 'Event' in Context else None Event = Context['Event'] if 'Event' in Context else None
@ -230,7 +235,10 @@ def SendMsg(Context, Data):
in_reply_to_id=Event['status']['id'], in_reply_to_id=Event['status']['id'],
visibility=('direct' if Event['status']['visibility'] == 'direct' else 'unlisted'), visibility=('direct' if Event['status']['visibility'] == 'direct' else 'unlisted'),
) )
elif isinstance(Manager, telegram.Update): elif isinstance(Event, telegram.Update):
if Destination:
Manager.bot.send_message(Destination, text=TextPlain)
else:
if InDict(Data, 'Media'): if InDict(Data, 'Media'):
Event.message.reply_photo( Event.message.reply_photo(
Data['Media'], Data['Media'],
@ -260,7 +268,7 @@ def Main() -> None:
dispatcher.add_handler(CommandHandler(Cmd, multifun)) dispatcher.add_handler(CommandHandler(Cmd, multifun))
#dispatcher.add_handler(CommandHandler('setfilter', setfilter)) #dispatcher.add_handler(CommandHandler('setfilter', setfilter))
dispatcher.add_handler(MessageHandler(Filters.text | Filters.command, filters)) dispatcher.add_handler(MessageHandler(Filters.text | Filters.command, TelegramQueryHandle))
print('Starting WinDog...') print('Starting WinDog...')
updater.start_polling() updater.start_polling()