I've recently gotten back into forking (more precisely, hard forking) multiple projects on GitHub.
This can, undeniably, pose a fun experience of which I'd like to give some short examples as well as the reasoning behind the fork.
diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 5a62c9a..0000000 --- a/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Dependencies -/node_modules - -# Private -/nft - -# Production -/build - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/static/.nojekyll b/.nojekyll old mode 100644 new mode 100755 similarity index 100% rename from static/.nojekyll rename to .nojekyll diff --git a/404.html b/404.html new file mode 100755 index 0000000..eff4b07 --- /dev/null +++ b/404.html @@ -0,0 +1,18 @@ + + +
+ + + + +We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
Your Docusaurus site did not load properly.
\nA very common reason is a wrong site baseUrl configuration.
\nCurrent configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+'
\nWe suggest trying baseUrl =
\n\n'}(e)).replace(/.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:function(e,t,n){const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6500:function(e,t,n){var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6500},9642:function(e){"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;nI've recently gotten back into forking (more precisely, hard forking) multiple projects on GitHub.
This can, undeniably, pose a fun experience of which I'd like to give some short examples as well as the reasoning behind the fork.
The following blog post outlines some of the reasons I generally advise against choosing Cerberus as your Telegram group management bot.
This article is based on version 0.3.0 of Cerberus Protection Bot.
A blog will soon be added in this spot. +As soon as there's anything worthwhile to talk about and the initial +alpha development phase of @PuddingBot is complete.
This can, undeniably, pose a fun experience of which I'd like to give some short examples as well as the reasoning behind the fork.
NeoCatclock is a fork of the venerable catclock by BarkyTheDog which itself is a slight
+update from the X10 original to work on modern X11 *nix systems.
To better understand the code, I condensed the original by removing the digital and analog modes
+and, finally, the mode code itself.
+This alone saved me about 950 lines of code.
The current process makes me study the GTK3+ documentation in-depth,
+as the ultimate goal is to port catclock from Motif to GTK to make it portable.
Eventually, I plan on rewriting the application in Go, using my CoreGraphics framework
+I originally wrote for Anima OS but now plan on bringing to all modern desktop platforms.

Yggdrasil is a fork of trizbort.io
+which itself is a re-implementation of trizbort, porting the latter from C# to the web.
Yggdrasil contains two fixes that have since been upstreamed.
What separates my fork from the original project is that I turned the web app into a desktop app
+while also adding translation support.
+Finally, my fork contains an exporter for my own Middangeard engine.
I have not actively worked on the project since 2019 but intend to revive it very soon,
+just as I'm reviving Middangeard itself.

Hippo Player Next (will probably be renamed to something else, to establish an original persona)
+is a fork of media-player that removes both the Electron and the web app part
+to focus solely on the desktop.
To achieve this desktop transformation, my fork utilizes go-astilectron,
+a modern Electron binding to Go that uses a TCP socket as an IPC mechanism between the
+Go application and the Electron renderer.
In order to better facilitate go-astilectron,
+I upstreamed changes that enable more fine grained window control
+without having to fall back on the Electron Remote module,
+which can normally be used inside go-astilectron like the following
+(if, like me, you're utilizing go-astilectron-bootstrap)
Windows: []*bootstrap.Window{{
+ Homepage: "index.html",
+ MessageHandler: desktop.HandleMessages,
+ Options: &astilectron.WindowOptions{
+ BackgroundColor: astikit.StrPtr("#333"),
+ Center: astikit.BoolPtr(true),
+ Width: astikit.IntPtr(800),
+ Height: astikit.IntPtr(600),
+ WebPreferences: &astilectron.WebPreferences{
+ EnableRemoteModule: astikit.BoolPtr(true),
+ },
+ },
+ }},
+Instead of the above and writing windowing code in JS, a window can now be set as Always on Top
+by accessing the astilectron.Window struct and calling SetAlwaysOnTop(enable) on it.
I also removed the CSD (Client Side Decorations) of the original Electron implementation
+in favor of re-using the OS' own window decorations.
Once baseline media support (which is utterly broken upstream) is established
+and the app uses a proper SQLite database to save playlists,
+I plan on adding support for classic MOD files and better support for theming.

ScummC and SCUMM itself are something I've been fascinated with for quite a while.
The original by Alban Bedel has not been in active development since 2018.
+However, there has been a slight update in the music department, courtesy of Masami Komuro
I lost my original local changes (mostly documentation) to a hard drive wipe at my old workplace,
+but I plan on revisiting this project very soon.
The following is a quick and simple step-by-step guide on how to create a fork of an existing project:
button.git clone <Fork URL>git remote add upstream <URL to original repository> to link back to the original project.git fetch upstream followed by git pull upstream.git log upstream/<branch> provides you with an upstream view of the commit log.git cherry pick <SHA>).
+The Open pull request button is located under Contribute near your commit history.]]>That's it for today. If you'd like to donate to my work, I'm now on GitHub Sponsors๐
This article is based on version 0.3.0 of Cerberus Protection Bot.
The Cerberus maintainer is a rather sketchy figure.
+Not only does he refuse any type of code audit, he has also previously been caught attempting to subvert a rival Telegram group (oh the joys of /pol/ Telegram clones) by trying to pit their admins against each other and slowly banning users from these groups. A practice generally known as nuking.
Since the development process is entirely closed and everything happens in private
(as opposed to Rose, which is closed source but has a documented development process, a changelog and a blog), nobody but its sole developer can be sure what direction is being taken, what design principles are being followed, redefined or outright ignored, or if any exploits are known.
Furthermore, I've personally witnessed the author of Cerberus write FROM his bot.
+This is not well known โ nor communicated, for obvious reasons โ but possible through the use of a 3rd party Telegram client like BGram.
+(link provided solely for research purposes. I do NOT endorse the use of this product.)
Lastly, his general attitude towards end users means that anybody using Cerberus is left to their own devices.
+No public support channels exist, and the documentation itself is rather sparse, technical and geared towards programmers rather
+than the average Joe.
The bot is linking to the author's personal Telegram channel, which provides no valuable insights but instead promotes his Omegle.

As already outlined in the previous paragraph, Cerberus' documentation is overall shoddy and incomplete.
The /help commands (there are several, since the author has chosen to separate them based on user scope) display a long, monotone list.
+There is no way to query help files for specific commands. Instead everything is presented vertically.
The /start command doesn't limit itself to the bare essentials of using and exploring the bot, instead bludgeoning the user with a wall of text.
The /ownerhelp command doesn't appear to work, at all.
+Neither in groups nor direct DMs to the bot have I nor others ever managed to coax the bot into returning any information.
Documentation for some of the more useful commands is wholly missing.
+The bot supports ads which are displayed every n-hours.
+Aside of the developer himself, nobody seems to be aware of its usage.
+Maybe there is no command and the ads are entered directly into a database
+by the sole maintainer?
The UI is cluttered and doesn't take advantage of basic Telegram bot features.
+Inline buttons are wholly missing and a (very basic) command list was only added after my outspoken criticism.




One of the things (the author of Cerberus names this as one of its outstanding features) that separates the bot from its contenders +is that it doesn't follow the tried and proved Telegram permission model, instead opting for an internal permission model of the author's own design.
The sparse documentation prompts the group owner to give Cerberus full permission and only promote other admins through Cerberus' /promote and /superpromote commands.
+On closer examination, this leads to all admin permissions being managed internally by Cerberus.
As far as Telegram is concerned,
+all admins promoted by Cerberus (admins or "superadmins" โ as Cerberus defines admins that can demote and, consequently, ban other admins) have the same two basic permissions set in the Telegram UI. "Change group info" and "Pin messages".
+It is thus clear that Cerberus violates the existing permission model and instead opts to implement its own, largely undocumented, cruft.
With the aforementioned in mind, I've also been informed by multiple sources that they're unable to remove group members that are not even clearly identified as admins.
The author of Cerberus failed to enclose what stage of the software development life cycle his bot is actually in.
+Nothing suggests that the bot is production ready, but nothing suggests that it's still in alpha or beta either.
Features are added in secret, at random intervals. Often without even incrementing the version number. +The bot is taken offline for maintenance or due to an issue without prior notice.
Combined with the lack of support, this leaves the user wondering whether Cerberus has not already reached +End-of-life or, at best, a maintenance stage.
As a major proponent of FOSS software,
I generally advise against the use of closed source or proprietary software products.
Closed source software, especially when produced by a small group of people or a single developer, seldom provides a coherent support experience.
+One of the strengths of free- and open-source software lies in its inherent capability to create communities and produce coherent documentation and other forms of community service.
@PuddingBot is and will remain completely free (as in freedom AND free beer) and open-source.
+As the author and maintainer of @PuddingBot I pledge to keep sensible data safe and handled with utmost care.
The full and unabridged @PuddingBot source code can be found on GitHub.
]]>A blog will soon be added in this spot. +As soon as there's anything worthwhile to talk about and the initial +alpha development phase of @PuddingBot is complete.
I've recently gotten back into forking (more precisely, hard forking) multiple projects on GitHub.
This can, undeniably, pose a fun experience of which I'd like to give some short examples as well as the reasoning behind the fork.
NeoCatclock is a fork of the venerable catclock by BarkyTheDog which itself is a slight
+update from the X10 original to work on modern X11 *nix systems.
To better understand the code, I condensed the original by removing the digital and analog modes
+and, finally, the mode code itself.
+This alone saved me about 950 lines of code.
The current process makes me study the GTK3+ documentation in-depth,
+as the ultimate goal is to port catclock from Motif to GTK to make it portable.
Eventually, I plan on rewriting the application in Go, using my CoreGraphics framework
+I originally wrote for Anima OS but now plan on bringing to all modern desktop platforms.
Yggdrasil is a fork of trizbort.io
+which itself is a re-implementation of trizbort, porting the latter from C# to the web.
Yggdrasil contains two fixes that have since been upstreamed.
What separates my fork from the original project is that I turned the web app into a desktop app
+while also adding translation support.
+Finally, my fork contains an exporter for my own Middangeard engine.
I have not actively worked on the project since 2019 but intend to revive it very soon,
+just as I'm reviving Middangeard itself.

Hippo Player Next (will probably be renamed to something else, to establish an original persona)
+is a fork of media-player that removes both the Electron and the web app part
+to focus solely on the desktop.
To achieve this desktop transformation, my fork utilizes go-astilectron,
+a modern Electron binding to Go that uses a TCP socket as an IPC mechanism between the
+Go application and the Electron renderer.
In order to better facilitate go-astilectron,
+I upstreamed changes that enable more fine grained window control
+without having to fall back on the Electron Remote module,
+which can normally be used inside go-astilectron like the following
+(if, like me, you're utilizing go-astilectron-bootstrap)
Windows: []*bootstrap.Window{{
Homepage: "index.html",
MessageHandler: desktop.HandleMessages,
Options: &astilectron.WindowOptions{
BackgroundColor: astikit.StrPtr("#333"),
Center: astikit.BoolPtr(true),
Width: astikit.IntPtr(800),
Height: astikit.IntPtr(600),
WebPreferences: &astilectron.WebPreferences{
EnableRemoteModule: astikit.BoolPtr(true),
},
},
}},
Instead of the above and writing windowing code in JS, a window can now be set as Always on Top
+by accessing the astilectron.Window struct and calling SetAlwaysOnTop(enable) on it.
I also removed the CSD (Client Side Decorations) of the original Electron implementation
+in favor of re-using the OS' own window decorations.
Once baseline media support (which is utterly broken upstream) is established
+and the app uses a proper SQLite database to save playlists,
+I plan on adding support for classic MOD files and better support for theming.

ScummC and SCUMM itself are something I've been fascinated with for quite a while.
The original by Alban Bedel has not been in active development since 2018.
+However, there has been a slight update in the music department, courtesy of Masami Komuro
I lost my original local changes (mostly documentation) to a hard drive wipe at my old workplace,
+but I plan on revisiting this project very soon.
The following is a quick and simple step-by-step guide on how to create a fork of an existing project:
git clone <Fork URL>git remote add upstream <URL to original repository> to link back to the original project.git fetch upstream followed by git pull upstream.git log upstream/<branch> provides you with an upstream view of the commit log.git cherry pick <SHA>).Open pull request button is located under Contribute near your commit history.That's it for today. If you'd like to donate to my work, I'm now on GitHub Sponsors๐
This can, undeniably, pose a fun experience of which I'd like to give some short examples as well as the reasoning behind the fork.
NeoCatclock is a fork of the venerable catclock by BarkyTheDog which itself is a slight
+update from the X10 original to work on modern X11 *nix systems.
To better understand the code, I condensed the original by removing the digital and analog modes
+and, finally, the mode code itself.
+This alone saved me about 950 lines of code.
The current process makes me study the GTK3+ documentation in-depth,
+as the ultimate goal is to port catclock from Motif to GTK to make it portable.
Eventually, I plan on rewriting the application in Go, using my CoreGraphics framework
+I originally wrote for Anima OS but now plan on bringing to all modern desktop platforms.

Yggdrasil is a fork of trizbort.io
+which itself is a re-implementation of trizbort, porting the latter from C# to the web.
Yggdrasil contains two fixes that have since been upstreamed.
What separates my fork from the original project is that I turned the web app into a desktop app
+while also adding translation support.
+Finally, my fork contains an exporter for my own Middangeard engine.
I have not actively worked on the project since 2019 but intend to revive it very soon,
+just as I'm reviving Middangeard itself.

Hippo Player Next (will probably be renamed to something else, to establish an original persona)
+is a fork of media-player that removes both the Electron and the web app part
+to focus solely on the desktop.
To achieve this desktop transformation, my fork utilizes go-astilectron,
+a modern Electron binding to Go that uses a TCP socket as an IPC mechanism between the
+Go application and the Electron renderer.
In order to better facilitate go-astilectron,
+I upstreamed changes that enable more fine grained window control
+without having to fall back on the Electron Remote module,
+which can normally be used inside go-astilectron like the following
+(if, like me, you're utilizing go-astilectron-bootstrap)
Windows: []*bootstrap.Window{{
+ Homepage: "index.html",
+ MessageHandler: desktop.HandleMessages,
+ Options: &astilectron.WindowOptions{
+ BackgroundColor: astikit.StrPtr("#333"),
+ Center: astikit.BoolPtr(true),
+ Width: astikit.IntPtr(800),
+ Height: astikit.IntPtr(600),
+ WebPreferences: &astilectron.WebPreferences{
+ EnableRemoteModule: astikit.BoolPtr(true),
+ },
+ },
+ }},
+Instead of the above and writing windowing code in JS, a window can now be set as Always on Top
+by accessing the astilectron.Window struct and calling SetAlwaysOnTop(enable) on it.
I also removed the CSD (Client Side Decorations) of the original Electron implementation
+in favor of re-using the OS' own window decorations.
Once baseline media support (which is utterly broken upstream) is established
+and the app uses a proper SQLite database to save playlists,
+I plan on adding support for classic MOD files and better support for theming.

ScummC and SCUMM itself are something I've been fascinated with for quite a while.
The original by Alban Bedel has not been in active development since 2018.
+However, there has been a slight update in the music department, courtesy of Masami Komuro
I lost my original local changes (mostly documentation) to a hard drive wipe at my old workplace,
+but I plan on revisiting this project very soon.
The following is a quick and simple step-by-step guide on how to create a fork of an existing project:
button.git clone <Fork URL>git remote add upstream <URL to original repository> to link back to the original project.git fetch upstream followed by git pull upstream.git log upstream/<branch> provides you with an upstream view of the commit log.git cherry pick <SHA>).
+The Open pull request button is located under Contribute near your commit history.]]>That's it for today. If you'd like to donate to my work, I'm now on GitHub Sponsors๐
This article is based on version 0.3.0 of Cerberus Protection Bot.
The Cerberus maintainer is a rather sketchy figure.
+Not only does he refuse any type of code audit, he has also previously been caught attempting to subvert a rival Telegram group (oh the joys of /pol/ Telegram clones) by trying to pit their admins against each other and slowly banning users from these groups. A practice generally known as nuking.
Since the development process is entirely closed and everything happens in private
(as opposed to Rose, which is closed source but has a documented development process, a changelog and a blog), nobody but its sole developer can be sure what direction is being taken, what design principles are being followed, redefined or outright ignored, or if any exploits are known.
Furthermore, I've personally witnessed the author of Cerberus write FROM his bot.
+This is not well known โ nor communicated, for obvious reasons โ but possible through the use of a 3rd party Telegram client like BGram.
+(link provided solely for research purposes. I do NOT endorse the use of this product.)
Lastly, his general attitude towards end users means that anybody using Cerberus is left to their own devices.
+No public support channels exist, and the documentation itself is rather sparse, technical and geared towards programmers rather
+than the average Joe.
The bot is linking to the author's personal Telegram channel, which provides no valuable insights but instead promotes his Omegle.

As already outlined in the previous paragraph, Cerberus' documentation is overall shoddy and incomplete.
The /help commands (there are several, since the author has chosen to separate them based on user scope) display a long, monotone list.
+There is no way to query help files for specific commands. Instead everything is presented vertically.
The /start command doesn't limit itself to the bare essentials of using and exploring the bot, instead bludgeoning the user with a wall of text.
The /ownerhelp command doesn't appear to work, at all.
+Neither in groups nor direct DMs to the bot have I nor others ever managed to coax the bot into returning any information.
Documentation for some of the more useful commands is wholly missing.
+The bot supports ads which are displayed every n-hours.
+Aside of the developer himself, nobody seems to be aware of its usage.
+Maybe there is no command and the ads are entered directly into a database
+by the sole maintainer?
The UI is cluttered and doesn't take advantage of basic Telegram bot features.
+Inline buttons are wholly missing and a (very basic) command list was only added after my outspoken criticism.




One of the things (the author of Cerberus names this as one of its outstanding features) that separates the bot from its contenders +is that it doesn't follow the tried and proved Telegram permission model, instead opting for an internal permission model of the author's own design.
The sparse documentation prompts the group owner to give Cerberus full permission and only promote other admins through Cerberus' /promote and /superpromote commands.
+On closer examination, this leads to all admin permissions being managed internally by Cerberus.
As far as Telegram is concerned,
+all admins promoted by Cerberus (admins or "superadmins" โ as Cerberus defines admins that can demote and, consequently, ban other admins) have the same two basic permissions set in the Telegram UI. "Change group info" and "Pin messages".
+It is thus clear that Cerberus violates the existing permission model and instead opts to implement its own, largely undocumented, cruft.
With the aforementioned in mind, I've also been informed by multiple sources that they're unable to remove group members that are not even clearly identified as admins.
The author of Cerberus failed to enclose what stage of the software development life cycle his bot is actually in.
+Nothing suggests that the bot is production ready, but nothing suggests that it's still in alpha or beta either.
Features are added in secret, at random intervals. Often without even incrementing the version number. +The bot is taken offline for maintenance or due to an issue without prior notice.
Combined with the lack of support, this leaves the user wondering whether Cerberus has not already reached +End-of-life or, at best, a maintenance stage.
As a major proponent of FOSS software,
I generally advise against the use of closed source or proprietary software products.
Closed source software, especially when produced by a small group of people or a single developer, seldom provides a coherent support experience.
+One of the strengths of free- and open-source software lies in its inherent capability to create communities and produce coherent documentation and other forms of community service.
@PuddingBot is and will remain completely free (as in freedom AND free beer) and open-source.
+As the author and maintainer of @PuddingBot I pledge to keep sensible data safe and handled with utmost care.
The full and unabridged @PuddingBot source code can be found on GitHub.
]]>The following blog post outlines some of the reasons I generally advise against choosing Cerberus as your Telegram group management bot.
This article is based on version 0.3.0 of Cerberus Protection Bot.
The Cerberus maintainer is a rather sketchy figure.
+Not only does he refuse any type of code audit, he has also previously been caught attempting to subvert a rival Telegram group (oh the joys of /pol/ Telegram clones) by trying to pit their admins against each other and slowly banning users from these groups. A practice generally known as nuking.
Since the development process is entirely closed and everything happens in private
(as opposed to Rose, which is closed source but has a documented development process, a changelog and a blog), nobody but its sole developer can be sure what direction is being taken, what design principles are being followed, redefined or outright ignored, or if any exploits are known.
Furthermore, I've personally witnessed the author of Cerberus write FROM his bot.
+This is not well known โ nor communicated, for obvious reasons โ but possible through the use of a 3rd party Telegram client like BGram.
+(link provided solely for research purposes. I do NOT endorse the use of this product.)
Lastly, his general attitude towards end users means that anybody using Cerberus is left to their own devices.
+No public support channels exist, and the documentation itself is rather sparse, technical and geared towards programmers rather
+than the average Joe.
The bot is linking to the author's personal Telegram channel, which provides no valuable insights but instead promotes his Omegle.

As already outlined in the previous paragraph, Cerberus' documentation is overall shoddy and incomplete.
The /help commands (there are several, since the author has chosen to separate them based on user scope) display a long, monotone list.
+There is no way to query help files for specific commands. Instead everything is presented vertically.
The /start command doesn't limit itself to the bare essentials of using and exploring the bot, instead bludgeoning the user with a wall of text.
The /ownerhelp command doesn't appear to work, at all.
+Neither in groups nor direct DMs to the bot have I nor others ever managed to coax the bot into returning any information.
Documentation for some of the more useful commands is wholly missing.
+The bot supports ads which are displayed every n-hours.
+Aside of the developer himself, nobody seems to be aware of its usage.
+Maybe there is no command and the ads are entered directly into a database
+by the sole maintainer?
The UI is cluttered and doesn't take advantage of basic Telegram bot features.
+Inline buttons are wholly missing and a (very basic) command list was only added after my outspoken criticism.




One of the things (the author of Cerberus names this as one of its outstanding features) that separates the bot from its contenders +is that it doesn't follow the tried and proved Telegram permission model, instead opting for an internal permission model of the author's own design.
The sparse documentation prompts the group owner to give Cerberus full permission and only promote other admins through Cerberus' /promote and /superpromote commands.
+On closer examination, this leads to all admin permissions being managed internally by Cerberus.
As far as Telegram is concerned,
+all admins promoted by Cerberus (admins or "superadmins" โ as Cerberus defines admins that can demote and, consequently, ban other admins) have the same two basic permissions set in the Telegram UI. "Change group info" and "Pin messages".
+It is thus clear that Cerberus violates the existing permission model and instead opts to implement its own, largely undocumented, cruft.
With the aforementioned in mind, I've also been informed by multiple sources that they're unable to remove group members that are not even clearly identified as admins.
The author of Cerberus failed to enclose what stage of the software development life cycle his bot is actually in.
+Nothing suggests that the bot is production ready, but nothing suggests that it's still in alpha or beta either.
Features are added in secret, at random intervals. Often without even incrementing the version number. +The bot is taken offline for maintenance or due to an issue without prior notice.
Combined with the lack of support, this leaves the user wondering whether Cerberus has not already reached +End-of-life or, at best, a maintenance stage.
As a major proponent of FOSS software,
I generally advise against the use of closed source or proprietary software products.
Closed source software, especially when produced by a small group of people or a single developer, seldom provides a coherent support experience.
+One of the strengths of free- and open-source software lies in its inherent capability to create communities and produce coherent documentation and other forms of community service.
@PuddingBot is and will remain completely free (as in freedom AND free beer) and open-source.
+As the author and maintainer of @PuddingBot I pledge to keep sensible data safe and handled with utmost care.
The full and unabridged @PuddingBot source code can be found on GitHub.
On the following pages you will find everything you'll need to know to work on @PuddingBot.
Tooling, versioning, an overview of the directory tree and the basics of writing a new module or improving +on an existing one shall all be answered.
If there remain any further questions, feel free to raise an issue.
Welcome to the @PuddingBot user guide.
The following pages seek to provide a comprehensive guide to using Pudding as your Telegram group management bot.
+To navigate the documentation, choose a topic from the sidebar on the left.
A modular Telegram group management bot
You don't need React to write simple standalone pages.
docs directory.
- // >
- // ),
- // },
- // {
- // title: 'Powered by React',
- // image: '/img/undraw_docusaurus_react.svg',
- // description: (
- // <>
- // Extend or customize your website layout by reusing React. Docusaurus can
- // be extended while reusing the same header and footer.
- // >
- // ),
- // },
-];
-
-function Feature({title, image, description}: FeatureItem) {
- return (
- {description}
-{siteConfig.tagline}
-