mirror of
https://gitlab.com/octospacc/WinDog.git
synced 2025-06-05 22:09:20 +02:00
69 lines
3.4 KiB
Python
Executable File
69 lines
3.4 KiB
Python
Executable File
# ==================================== #
|
|
# WinDog multi-purpose chatbot #
|
|
# Licensed under AGPLv3 by OctoSpacc #
|
|
# ==================================== #
|
|
|
|
def cSource(context:EventContext, data:InputMessageData):
|
|
send_message(context, {"text_plain": ("""\
|
|
* Original Code: {https://gitlab.com/octospacc/WinDog}
|
|
* Mirror: {https://github.com/octospacc/WinDog}
|
|
""" + (f"* Modified Code: {{{ModifiedSourceUrl}}}" if ModifiedSourceUrl else ""))})
|
|
|
|
def cGdpr(context:EventContext, data:InputMessageData):
|
|
pass
|
|
|
|
UserSettingsLimits = {
|
|
"language": 13,
|
|
}
|
|
|
|
def cConfig(context:EventContext, data:InputMessageData):
|
|
language = data.user.settings.language
|
|
if (key := data.command.arguments.get):
|
|
key = key.lower()
|
|
if (not key) or (key not in UserSettingsLimits):
|
|
return send_status_400(context, language)
|
|
if not (settings := UserSettingsData(data.user.id))._exists:
|
|
User.update(settings=EntitySettings.create()).where(User.id == data.user.id).execute()
|
|
settings = UserSettingsData(data.user.id)
|
|
if (value := data.command.body):
|
|
if len(value) > UserSettingsLimits[key]:
|
|
return send_status(context, 500, language)
|
|
EntitySettings.update(**{key: value}).where(EntitySettings.entity == data.user.id).execute()
|
|
settings = UserSettingsData(data.user.id)
|
|
if (key):
|
|
# TODO show a hint on possible options? and add proper text hints for results
|
|
return send_message(context, {"text_plain": str(obj_get(settings, key))})
|
|
# TODO show general help when no useful parameters are passed
|
|
# ... area: eu, us, ...
|
|
# ... language: en, it, ...
|
|
# ... userdata: import, export, delete
|
|
|
|
def cPing(context:EventContext, data:InputMessageData):
|
|
# nice experiment, but it won't work with Telegram since time is not to milliseconds (?)
|
|
#time_diff = (time_now := int(time.time())) - (time_sent := data.datetime)
|
|
#send_message(context, OutputMessageData(text_html=f"<b>Pong!</b>\n\n{time_sent} → {time_now} = {time_diff}"))
|
|
word = (obj_get({"dick": "cock"}, data.command.name) or data.command.name.replace('i', 'o'))
|
|
send_message(context, OutputMessageData(text_html=f"<b>{word[0].upper()}{word[1:]}!</b>"))
|
|
|
|
#def cTime(update:Update, context:CallbackContext) -> None:
|
|
# update.message.reply_markdown_v2(
|
|
# CharEscape(choice(Locale.__('time')).format(time.ctime().replace(' ', ' ')), 'MARKDOWN_SPEECH'),
|
|
# reply_to_message_id=update.message.message_id)
|
|
|
|
#def cEval(context:EventContext, data:InputMessageData) -> None:
|
|
# send_message(context, {"Text": choice(Locale.__('eval'))})
|
|
|
|
register_module(name="Base", endpoints=[
|
|
SafeNamespace(names=["source"], handler=cSource),
|
|
SafeNamespace(names=["config", "settings"], handler=cConfig, body=False, arguments={
|
|
"get": True,
|
|
}),
|
|
#SafeNamespace(names=["gdpr"], summary="Operations for european citizens regarding your personal data.", handler=cGdpr),
|
|
SafeNamespace(names=["ping", "bing", "ding", "dick"], handler=cPing),
|
|
#SafeNamespace(names=["eval"], summary="Execute a Python command (or safe literal operation) in the current context. Currently not implemented.", handler=cEval),
|
|
#SafeNamespace(names=["format"], summary="Reformat text using an handful of rules. Not yet implemented.", handler=cFormat),
|
|
#SafeNamespace(names=["frame"], summary="Frame someone's message into a platform-styled image. Not yet implemented.", handler=cFrame),
|
|
#SafeNamespace(names=["repeat"], summary="I had this planned but I don't remember what this should have done. Not yet implemented.", handler=cRepeat),
|
|
])
|
|
|