Git Product home page Git Product logo

maubot-communitybot's Introduction

Community Bot

a maubot plugin that helps administrators of communities on matrix, based on the concept of a matrix space. this bot will attempt to track user activity in any room that it is in, so you may want to leverage join to ensure your bot doesn't end up somewhere it's not supposed to be.

features

greet new users on joining a room

configure your bot to send a custom greeting to users whenever they join a room! configuration file provides a greeting map (define multiple greetings each with an identifier) and then a configuration of which rooms to greet users in, and which greeting message the bot should send them.

Configure a notification_room to receive messages when someone joins one of the greeting rooms. If you just want notifications (perhaps when someone joins the space, where the bot likely cannot send a greeting anyway) set the greeting name to 'none' in the greeting map, and the bot will skip the greeting and send a notification to your notification room.

activity tracking and reporting

tracks the last message timestamp of a user across any room that the bot is in, and generates a simple report. intended to be used to boot people from a matrix space and all space rooms after a period of inactivity (prune inactive users) with the purge subcommand.

supports simple threshold configuration and the option to also track "reaction" activity.

you can also exempt users from showing as "inactive" in the report by setting their ignore status with the ignore and unignore subcommands, e.g. !community ignore @takinabreak:fromthis.group. this is helpful to avoid accidentally purging admin accounts, backup accounts, rarely used bots, etc.

sync subcommand will actively sync your space member list with the database to track active members properly. new members to the space automatically trigger a sync, as do most other commands. this command is mostly deprecated but you may want to run it just to see what it does.

generate a report with the report subcommand (i.e. !community report) to see your inactive users.

user management

purge inactive users with the purge subcommand (i.e. !community purge).

kick an individual user from your space and all child rooms, regardless of activity status, with the kick subcommand (e.g. !community kick @malicious:user.here). this is useful in communities built on the concept of private (invite only) matrix spaces.

if you want more sever action, use the ban and unban subcommands to ban users from all rooms in the space (this action will automatically kick them from those rooms as well). if you've made a mistake, use the unban option, but they will need to rejoin all rooms themselves or be re-invited.

use the guests subcommand to see who is in a room but NOT a member of the parent space (invited guests) e.g. !community guests #myroom:alias.here.

admin/moderator management

set consistent power levels across all your rooms for your community administrators! the config defines a list of both admins and moderators (admins have a Power Level of 100, mods have PL50). running the setpower subcommand (i.e. !community setpower) will roll through all rooms in the space (including the space itself) and attempt to true-up user permissions to match. if you are running legacy rooms not managed by the bot, and the bot does not have permission to send power-level state events to the room, it will return a list for you to handle manually. users who have a PL greater than 0 and are not listed as either an admin or moderator will be removed from the permission list, effectively returning their power to whatever the room default is (usually 0).

room creation

use the createroom subcommand to create a new room according to your preferences, and join it into the parent space. will attempt to sanitize the room name and assign a room alias automatically. the bot user will be assigned very high power level (1000) and set an admin power level (100) to plugin administrators, 50 to moderators. this ensures that the bot is still able to manage room admins. the bot will also invite other users to these new rooms as configured.

rooms created by the bot will have join restriction limited to members of the space.

get room ID

sometimes you need to know a rooms identifier, but if the room has an alias associated with it not all clients make it easy (or possible) to find. this subcommand (!community roomid) can be used to return the room id that a room alias points to. with no argument passed, it will return the current room's ID, or you can pass it an alias (e.g. !community roomid #whatisthisroom:myserver.tld).

installation

install this like any other maubot plugin: zip the contents of this repo into a file and upload via the web interface, or use the mbc utility to package and upload to your maubot server.

be sure to give your bot permission to kick people from all rooms, otherwise management features will not work!

maubot-communitybot's People

Contributors

williamkray avatar

Stargazers

ᎠᎡ. Ѕϵrgϵ Ѵictor avatar  avatar Danny Colin avatar Houfu Ang avatar

Watchers

 avatar

maubot-communitybot's Issues

[feature] set power level for specific users across all rooms in the space

would be nice to have a mapping of specific users who should have special power levels (like moderators), and a command that would loop through rooms in the space, check the power levels of the room, and adjust the state event accordingly.

this is going to be ugly because of how these state events are handled (you have to basically recreate the whole thing with changes, you can't just update one piece) but i think it's do-able.

incorporate file/image controls

currently i'm using a redaction plugin to protect a publicly facing room from image-based spam attacks, but it would be nice to incorporate this concept into the communitybot, and allow for things like only enacting controls for users who are not space-members, or including a magic "all rooms" value to implement these controls in all rooms in the space.

join restriction

would be helpful to pull the concepts from the join plugin into here, allowing admins/mods to run commands, and also to ensure the bot only floats around rooms within the space if invited by anyone else.

[feature] report messages to admin notification room

would be helpful to allow community members to report messages to community administrators. there's already a notification room configuration in the plugin for member join events, it could be leveraged for report notifications.

initial thinking is emoji reaction to report messages, and then the notification would include a link to the message event for admins to follow and make judgement about. this avoids using server reports, which is a clunky system, and enables community admins regardless of what server they're on.

could allow for a bot command for deleting the reported message, but could be clunky going back and forth between rooms... would need to consider how to make that easier. maybe another emoji, restricted to admins, that triggers a message deletion by the bot. but need to think about it. in theory, if rooms are created with the createroom command, admins should already have the appropriate power level to delete messages.

room replacement

i'm struggling with permissions in existing rooms in my community. it's not always the best option, but sometimes you just gotta create a new room with the right permissions, and tombstone the old one. would be nice to do all the associated steps required automagically.

user message purging

would be nice to have a command to go nuclear on a user:

  • ban
  • kick
  • purge their messages from all rooms
  • attempt to quarantine media?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.