From 2e9ce7023d1c4fd4bdc8d85fd715901ae9c42f06 Mon Sep 17 00:00:00 2001 From: rom4nik <46846000+rom4nik@users.noreply.github.com> Date: Sun, 20 Mar 2022 01:53:43 +0100 Subject: [PATCH] first code commit --- LICENSE | 9 +++++++++ README.md | 10 +++++++++- alternatingcaps.py | 16 ++++++++++++++++ maubot.yaml | 37 +++++++++++++++++++++++++++++++++++++ preview.png | Bin 0 -> 14112 bytes 5 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 LICENSE create mode 100644 alternatingcaps.py create mode 100644 maubot.yaml create mode 100644 preview.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..01a4297 --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2022 Przemysław Romanik + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index aea1f2c..778d3f6 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# maubot-alternatingcaps \ No newline at end of file +# maubot-alternatingcaps + +A simple [maubot](https://github.com/maubot/maubot) plugin that repeats previous message in room using aLtErNaTiNg cApS. + +![preview](preview.png) + +## Usage + +Download .mbp from [releases](https://github.com/rom4nik/maubot-alternatingcaps/releases), [upload it](https://docs.mau.fi/maubot/usage/basic.html#uploading-plugins) to server, [create an instance](https://docs.mau.fi/maubot/usage/basic.html#creating-instances), send some message in a room with bot present, then send `!altcaps`. \ No newline at end of file diff --git a/alternatingcaps.py b/alternatingcaps.py new file mode 100644 index 0000000..9f9eae6 --- /dev/null +++ b/alternatingcaps.py @@ -0,0 +1,16 @@ +from maubot import Plugin, MessageEvent +from maubot.handlers import command, event +from mautrix.types import EventType + + +class AlternatingCaps(Plugin): + last_message = None + + @event.on(EventType.ROOM_MESSAGE) + async def message_handler(self, evt: MessageEvent) -> None: + self.last_message = evt.content.body + + @command.new() + async def altcaps(self, evt: MessageEvent) -> None: + if self.last_message: + await evt.respond("".join([c.upper() if i % 2 else c.lower() for i, c in enumerate(self.last_message)])) diff --git a/maubot.yaml b/maubot.yaml new file mode 100644 index 0000000..892434a --- /dev/null +++ b/maubot.yaml @@ -0,0 +1,37 @@ +# The unique ID for the plugin. Java package naming style. (i.e. use your own domain, not xyz.maubot) +id: pl.rom4nik.maubot.alternatingcaps + +# A PEP 440 compliant version string. +version: 0.1.0 + +# The SPDX license identifier for the plugin. https://spdx.org/licenses/ +# Optional, assumes all rights reserved if omitted. + +license: MIT + + +# The list of modules to load from the plugin archive. +# Modules can be directories with an __init__.py file or simply python files. +# Submodules that are imported by modules listed here don't need to be listed separately. +# However, top-level modules must always be listed even if they're imported by other modules. +modules: +- alternatingcaps + +# The main class of the plugin. Format: module/Class +# If `module` is omitted, will default to last module specified in the module list. +# Even if `module` is not omitted here, it must be included in the modules list. +# The main class must extend maubot.Plugin +main_class: AlternatingCaps + +# Extra files that the upcoming build tool should include in the mbp file. + +#extra_files: +#- base-config.yaml + + +# List of dependencies +#dependencies: +#- foo + +#soft_dependencies: +#- bar>=0.1 \ No newline at end of file diff --git a/preview.png b/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..437edd1fe5e47b8213c91b45442b888451268965 GIT binary patch literal 14112 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