From a80b038b84d40f1f2b5f5f8e9dabab48fda110b0 Mon Sep 17 00:00:00 2001 From: bot Date: Thu, 19 Dec 2024 15:11:15 +0000 Subject: [PATCH] Update export statistics --- dist/Ragnar-1.3.37-py3-none-any.whl | Bin 7755 -> 8450 bytes dist/ragnar-1.3.37.tar.gz | Bin 6263 -> 6939 bytes src/Ragnar.egg-info/PKG-INFO | 90 +++++++++++++++++++++------- 3 files changed, 70 insertions(+), 20 deletions(-) diff --git a/dist/Ragnar-1.3.37-py3-none-any.whl b/dist/Ragnar-1.3.37-py3-none-any.whl index 6e5e31b2d4b795f2bd673b7058f643cf27886d11..4bd3eb072c99514f768469537d2ff01c039c3b43 100644 GIT binary patch delta 2662 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 C9ImZDUC!Dkt5Z9z%xO;I1p zpw^(1@x}vZpf=|ryy74bNC0H( zkqKP^ALiX(4s(Mt4?l#9n!I8Bhe)dw;()z98Y-a(Ft>av62}EIQ3o!mNK_Oe7UDs3 zdXt}yra(ZTBt8%bO#=|pfR(Aek%^JL(QW%DK~p-g$D1lXndh9*7ZL3^9*EPaKvCfr zUU0uhcbF(&f3NynLJsn+Z5M@QL!_&1+u#VQcACM{9ok_%o&hQmUlK2DYgGF=x#p3k zHtC;NPrvah3R0_bXo@BqrpE@4HJ1MuU9{m5Gig$)piuR{!3j(tU@749yM~NA{2hr^ zqmqs&DnaMkuXHu2iRC`S-|L5 zDskLPde-FSuWM{zI63gRv>bD2x>p0zwHfm{DuaL?-tx8*Mp*Za-NeSkhSsd)^%7?HtDHw{aQ{k5XsEI5ypdSBCvwxw8Mbv5Q@@k<(Z+pynZ_tH0Q$}^%%bawK|6EFE6n=I;Oy?-jU1D0}g z%wwaim#|d`rgN3}KTTfI$MrKTjEkn`NSjV;dg2CYZU8E1>CnJ+t(uV_U~aS+t|r3#8@coUjm+yLPRKuJvKp_7TPVd-tn1pjzkN zmx6`c>gy_MY%_KTz26N4)fJw8O_oFTbK<3R-d=v6)Z88Nn`^3*C_22xYK9xTt?rvSD?uZaO`)_leM z37z-z?j$%L;C)xhg>(4B3biAsQ5P`kQ^u^kK0n%D5sMaj(Ziaohr=kQ=2ec}TvCS; z`{$EADZ-X1Lzj#dQ*jPo<#CZIN#$qNvj2Q0Bnzu4H6hNp^-C3QZVhFYPh6sED0L+J z>V-=U-p2y=+0VV_t^zoGf#Lwf3=}St3h(ME7}&AsB{|0R`C2X_M8C$mEDuceOf_i( zx`HOM#_cV2=4s8hEbFV+4F+Y3&Brcp;U752eQNg(f9N|ZW`xCVj^QH|GE`+Gf*yy; z751P|Klj)i{T5G{q;Y_e3aX=T2WHB(ZkQZCBMDcq>q}P!Iu&|}AinGXk1eqz@e$4f zMI@*xQBp6ryPD_`8?x};qN!=gM<69%W$CxoyRMUK%%R!<%tfy}^>4+d4Vsi^2~P1b z#`Ags6kTVG`hpGR2@fL&#(!pRW`dk&_sh*qVi)7c8nLvLdP$(wpnmqM8z=F}m8f8U zI@?aWqGlVg{IxqMWL#TrU1UuXs$i>OO*)vb6{_tzdJ{t>S$LkM`&qSV_)ELcDEOiU z=2GM<&sV)4pRJs>SH{?%Fl3w0o+!6ib6eE9@-s&zczDt0ArLXJ@rS9)TY|it5#UVdjil!}N z$hDrxf1p`Lms@T816Y*)p-a*HQQt4`qrNjgpiHLz7fH49sEtIE=XM?_D&O6pUtthH__-&`7X1oI8s~ pLmY#CKVNK_ECU2!#64e~687^;|NVwu*-Fg(A2we*^vRcjN#7 diff --git a/dist/ragnar-1.3.37.tar.gz b/dist/ragnar-1.3.37.tar.gz index 9cabdfe82e6d94c7b74ae50ed9d25f6f7b791f8e..f616aaa174a69f4143e7d049eb4bb948ba148154 100644 GIT binary patch literal 6939 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 diff --git a/src/Ragnar.egg-info/PKG-INFO b/src/Ragnar.egg-info/PKG-INFO index 713dabc..0077240 100644 --- a/src/Ragnar.egg-info/PKG-INFO +++ b/src/Ragnar.egg-info/PKG-INFO @@ -9,15 +9,13 @@ Requires-Python: >=3.7 Description-Content-Type: text/markdown Requires-Dist: requests==2.32.3 -# Ragnar +# Ragnar Bot: Automated Moderation System for Devrant.io -This is an anti spam bot network. It is named after the viking for no obvious reason. +## Overview +Ragnar Bot is an automated system designed to interact with the **Devrant.io API** for community moderation. It detects spam, flags inappropriate content, and takes corrective actions such as downvoting and commenting. The system is scalable, customizable, and supports concurrent operations for multiple users. -This bot network works great and is made not to be annoying to the server by not connecting all at once. It's caching certain things like user profile / resolved user id's and if a rant already is flagged for example. - -The bot network removes spam before users of the development community even notice. - -Here's some fan art made by Buffon, a contributor of this project: +## Fan-art +This is some fan art made by Buffon, a contributor of this project: ![Image generated by Buffon](buffon.jpg) @@ -29,18 +27,70 @@ Third one, the legendary bot war of 2024 ended in peace. ![Image generated by Buffon](buffon3.jpg) -## How they work -One process starts many bots. These bots look at new rants. -If there is a new rant: -1. Check if user has more than five posts. If so, it will not be seen as spam. -2. It will check certain keywords like hacker / money crypto related. -3. User will be informed by the bot network that his rant is flagged and what to do about it. -4. Rant will be downvoted by the bot network making it disappear. +--- + +## Features + +### API Integration +- **User Authentication**: Secure login with credentials. +- **Profile Retrieval**: Access user profile data. +- **Content Search**: Find posts matching specific keywords or patterns. +- **Comments Management**: Post and fetch comments on rants. +- **Voting System**: Upvote or downvote rants programmatically. +- **Fetch Rants**: Retrieve and sort recent rants for analysis. + +### Spam Detection +- **Keyword Triggers**: Detect spam using predefined keywords like `crypto`, `bitcoin`, and more. +- **Regex Matching**: Identify suspicious patterns in text, such as URLs or phone numbers. +- **Heuristic Checks**: Evaluate user profiles and comments for unusual behavior. + +### Automation +- **Flagging Spam**: Automatically downvote and comment on posts flagged as spam. +- **Concurrent Execution**: Operates multiple bots simultaneously using multithreading. +- **Customizable Triggers**: Adjust detection patterns to fit evolving spam trends. + +### Logging & Caching +- **Logging**: Outputs activity logs to both the console and a file for debugging and monitoring. +- **Caching**: Uses a custom caching system to optimize performance and reduce redundant operations. + +--- + +## How It Works + +### Components +1. **API**: + Handles all interactions with the Devrant.io platform, including user authentication, content retrieval, and posting actions. + +2. **Bot**: + Implements moderation logic: + - Identifies suspicious content. + - Posts comments warning users about flagged content. + - Maintains a history of checked rants to avoid redundant processing. + +3. **CLI**: + Command-line interface to configure and execute the bot. Accepts user credentials and runs bots for multiple users simultaneously. + +4. **Victoria Integration**: + Fetches user-related data from a remote service (`victoria.molodetz.nl`) for enhanced operations. + +### Workflow +1. The bot authenticates using the provided username and password. +2. It retrieves and evaluates recent rants for spam indicators. +3. If spam is detected: + - Posts a predefined warning comment. + - Downvotes the rant. +4. Maintains logs and runs continuously to monitor new rants. + +--- + +## Installation & Usage + +1. **Setup**: + Clone the repository and ensure all dependencies are installed. + +2. **Run the Bot**: + Execute the bot via the CLI: + ```bash + python cli.py -u -p -## Notice -Some parts of the bot network are not published because they're very sensitive for abuse or specific made to work with my (mail-)server. -Not published parts are part of the Victoria project: - - Registering users. - - Account registration confirmation emails handler. - - Mass advertisement removal by indexing and scanning the network.