Skip to content

Commit

Permalink
updated upload methods
Browse files Browse the repository at this point in the history
  • Loading branch information
drui9 committed Jul 5, 2024
1 parent 5667e8f commit 139e454
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 34 deletions.
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
<img src="https://raw.githubusercontent.com/drui9/autogram/main/autogram.png" align="middle" alt="Autogram">
<p>

## Installation ::
Autogram is a telegram bot-API wrapper written in python3, with a keen focus on remaining stupidly simple.

## QuickStart
Expand Down
57 changes: 30 additions & 27 deletions autogram/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,9 @@ def wrapper(fn):
#--
def __init__(self, config :dict) -> None:
self.requests = requests.session()
self.config = config or self.do_err(msg='Please pass a config <object :Dict>!')
if not self.config.get("telegram-token"):
self.do_err(msg='Missing bot token!')

def do_err(self, msg :str, err_type: Any =RuntimeError):
"""Utility: Raise error"""
logger.critical(msg)
raise err_type(msg)
assert config, 'Missing bot configuration dictionary'
self.config = config
assert self.config.get("telegram-token"), 'Missing bot token!'

def data(self, key :str, val :Any|None=None) -> Any:
"""Persistent data storage"""
Expand All @@ -43,18 +38,14 @@ def data(self, key :str, val :Any|None=None) -> Any:
if val != None:
self.config['data'].update({key:val})
return save_config(self.config)
elif (ret := self.config['data'].get(key)) == None:
return self.do_err(f'Key[{key}] not in store!', err_type=KeyError)
return ret
return self.config['data'].get(key)

def settings(self, key :str, val: Any|None=None) -> Any:
"""Get or set value of key in config"""
if val != None:
self.config.update({key: val})
return save_config(self.config)
elif (ret := self.config.get(key)) == None:
return self.do_err(msg=f'Missing key in config: {key}', err_type=KeyError)
return ret
return self.config.get(key)

def setWebhook(self, hook_addr : str, **kwargs):
"""kwargs update setWebhook parameters with higher precendence. Existing(url, allowed_updates)"""
Expand Down Expand Up @@ -195,52 +186,64 @@ def answerCallbackQuery(self, query_id, text :str|None =None, **kwargs) -> Respo
} | kwargs
return self.requests.get(url, params=params)

def sendPhoto(self,chat_id: int, photo: bytes|str, caption: str|None = None, **kwargs) -> Response: # noqa: E501
def sendPhoto(self,chat_id: int, photo: bytes|str, **kwargs) -> Response: # noqa: E501
"""Sends a photo to a telegram user"""
"""kwargs: caption, etc."""
url = f'{self.endpoint}bot{self.settings("telegram-token")}/sendPhoto'
filename = kwargs.pop('filename') if 'filename' in kwargs else None
params = {
'chat_id':chat_id,
'caption': caption,
'chat_id':chat_id
} | kwargs
self.sendChatAction(chat_id, chat_actions.photo)
if isinstance(photo, str):
return self.requests.get(url, params=params|{'photo': photo})
if filename:
return self.requests.get(url, params=params, files={'photo': (filename, photo)})
return self.requests.get(url, params=params, files={'photo': photo})

def sendAudio(self,chat_id: int,audio :bytes|str, caption: str|None = None, **kwargs) -> Response: # noqa: E501
def sendAudio(self,chat_id: int,audio :bytes|str, **kwargs) -> Response: # noqa: E501
"""Sends an audio to a telegram user"""
"""kwargs: caption, etc."""
url = f'{self.endpoint}bot{self.settings("telegram-token")}/sendAudio'
filename = kwargs.pop('filename') if 'filename' in kwargs else None
params = {
'chat_id':chat_id,
'caption': caption
'chat_id':chat_id
} | kwargs
self.sendChatAction(chat_id, chat_actions.audio)
if isinstance(audio, str):
return self.requests.get(url, params=params|{'audio': audio})
if filename:
return self.requests.get(url, params=params, files={'audio': (filename, audio)})
return self.requests.get(url, params=params, files={'audio': audio})

def sendDocument(self,chat_id: int ,document: bytes|str, caption: str|None = None, **kwargs) -> Response: # noqa: E501
def sendDocument(self,chat_id: int ,document: bytes|str, **kwargs) -> Response: # noqa: E501
"""Sends a document to a telegram user"""
"""kwargs: caption, etc."""
url = f'{self.endpoint}bot{self.settings("telegram-token")}/sendDocument'
filename = kwargs.pop('filename') if 'filename' in kwargs else None
params = {
'chat_id':chat_id,
'caption':caption
'chat_id':chat_id
} | kwargs
self.sendChatAction(chat_id, chat_actions.document)
if isinstance(document, str):
return self.requests.get(url, params=params|{'document': document})
if filename:
return self.requests.get(url, params=params, files={'document': (filename, document)})
return self.requests.get(url, params=params, files={'document': document})

def sendVideo(self,chat_id: int ,video: bytes|str, caption: str|None = None, **kwargs) -> Response: # noqa: E501
def sendVideo(self,chat_id: int ,video: bytes|str, **kwargs) -> Response: # noqa: E501
"""Sends a video to a telegram user"""
"""kwargs: caption, etc."""
url = f'{self.endpoint}bot{self.settings("telegram-token")}/sendVideo'
filename = kwargs.pop('filename') if 'filename' in kwargs else None
params = {
'chat_id':chat_id,
'caption':caption
'chat_id':chat_id
} | kwargs
self.sendChatAction(chat_id, chat_actions.video)
if isinstance(video, str):
return self.requests.get(url, params=params|{'video': video})
if filename:
return self.requests.get(url, params=params,files={'video': (filename, video)})
return self.requests.get(url, params=params,files={'video':video})

def forceReply(self, **kwargs) -> str:
Expand All @@ -259,7 +262,7 @@ def getKeyboardMarkup(self, keys: list, **kwargs) -> str:

def getInlineKeyboardMarkup(self, keys: list, **kwargs) -> str:
markup = {
'inline_keyboard':keys
'inline_keyboard': keys
}|kwargs
return json.dumps(markup)

Expand Down
2 changes: 1 addition & 1 deletion autogram/bottle-rest.py → docs/bottle-rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ def shutdown(self):
# serv_thread = threading.Thread(target=runServer, args=(server,))
# serv_thread.name = 'Autogram:Bottle'
# serv_thread.daemon = True
# serv_thread.start()
# serv_thread.start()
10 changes: 5 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ build-backend = "setuptools.build_meta"

[project]
name = "autogram"
version = "3.6.0"
version = "3.6.1"
description = "An easily extensible telegram API wrapper"
readme = "README.md"
authors = [{ name = "droi9", email = "ngaira14nelson@gmail.com" }]
authors = [{ name = "drui9", email = "drui9@duck.com" }]
license = { file = "LICENSE" }
classifiers = [
"License :: OSI Approved :: MIT License",
Expand All @@ -18,13 +18,13 @@ classifiers = [
]
keywords = ["autogram", "telegram", "API", "wrapper"]
dependencies = [
"loguru>=0.7.2",
"requests>=2.32.3",
"loguru",
"requests",
]
requires-python = ">=3.6"

[project.optional-dependencies]
dev = ["build", "twine"]

[project.urls]
Homepage = "https://github.com/droi9/autogram"
Homepage = "https://github.com/drui9/autogram"

0 comments on commit 139e454

Please sign in to comment.