<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>影子屋 (文章分类：MastoAdmin)</title><link>https://blog.bgme.me/</link><description></description><atom:link href="https://blog.bgme.me/categories/mastoadmin.xml" rel="self" type="application/rss+xml"></atom:link><language>zh_cn</language><copyright>Contents © 2024 &lt;a href="mailto:i@bgme.me"&gt;无影人&lt;/a&gt; 
&lt;a rel="license noopener nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/4.0/" class="ui image" title="如无特别说明，本站文章均遵循 CC BY-SA 4.0 协议，转载请注明作者及出处。"&gt;
&lt;img alt="Creative Commons Attribution-ShareAlike 4.0 International License" src="/license.png"&gt;
&lt;/a&gt;
</copyright><lastBuildDate>Wed, 24 Apr 2024 12:02:12 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>现代问题现代方法解决：通过脚本高效处理SPAM</title><link>https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/</link><dc:creator>无影人</dc:creator><description>&lt;figure class="align-center"&gt;
&lt;img alt="/images/2024/anti-spam/spam-wave.png" src="https://blog.bgme.me/images/2024/anti-spam/spam-wave.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;一大波SPAM即将到来&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;最近，SPAM 狂潮来袭，一波又一波的 SPAM 的到来，让实例管理人员疲于奔命。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="/images/2024/anti-spam/report-email.png" src="https://blog.bgme.me/images/2024/anti-spam/report-email.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;有关 Report 的提醒邮件 （未完，下方还有好几屏）&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;面对 SPAM 报告，我们需要封禁 SPAM 帐户，Limite 被 SPAM 入侵的实例以防进一步的骚扰。&lt;/p&gt;
&lt;p&gt;但这几个步骤通过 Mastodon Web 自带的管理界面进行非常麻烦，需要打开好几个网页，点击好多次才能完成。
如果你还要发布管理操作报告，那就更麻烦了。&lt;/p&gt;
&lt;p&gt;Mastodon Web 自带的管理工具，在这种大规模 SPAM 入侵时，显得有一些力不从心。&lt;/p&gt;
&lt;p&gt;人肉管理 vs 脚本SPAM，人肉管理能不能胜利尚不好说，但累死是一定的。现代问题现代方法解决，管理也需要脚本辅助。&lt;/p&gt;
&lt;p&gt;本文将介绍，如何使用脚本半自动化处理的黑猫SPAM。&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;本文提到的所有文件可至 &lt;a class="reference external" href="https://blog.bgme.me/listings/anti-blackcat-spam/"&gt;anti-blackcat-spam 目录&lt;/a&gt;查看。&lt;/p&gt;
&lt;section id="section-1"&gt;
&lt;h2&gt;0. 所需条件&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Mastodon PostgreSQL 数据库访问权限&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mastodon 实例 Admin 权限&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;python 运行环境&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="section-2"&gt;
&lt;h2&gt;1. 注册应用&lt;/h2&gt;
&lt;p&gt;Mastodon Web 界面，打开 首选项（Preferences） -&amp;gt; 开发（Development） 。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2024/anti-spam/settings-applications.png"&gt;&lt;img alt="/images/2024/anti-spam/settings-applications.png" src="https://blog.bgme.me/images/2024/anti-spam/settings-applications.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;首选项（Preferences） -&amp;gt; 开发（Development）&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;创建如下 Scopes 的应用：&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_df701df7d31b4b2b857722d3ca700216-1" name="rest_code_df701df7d31b4b2b857722d3ca700216-1" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_df701df7d31b4b2b857722d3ca700216-1"&gt;&lt;/a&gt;read:accounts read:statuses write:reports admin:read:accounts admin:read:domain_allows admin:read:domain_blocks admin:read:reports admin:write:accounts admin:write:domain_allows admin:write:domain_blocks admin:write:reports
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="spam"&gt;
&lt;h2&gt;2. 查找疑似 SPAM 帐户&lt;/h2&gt;
&lt;p&gt;连接上 Mastodon PostgreSQL ，运行如下 SQL 找出疑似 SPAM 帐户，并将结果保存为 CSV 文件。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-1" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-1" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;-- 查找所有位于未进行管理操作实例的疑似 SPAM 帐户&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-2" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-2" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-2"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-3" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-3" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-4" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-4" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-5" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-5" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-6" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-6" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;display_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-7" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-7" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;avatar_file_name&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-8" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-8" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-8"&gt;&lt;/a&gt;&lt;span class="k"&gt;from&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-9" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-9" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;accounts&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-10" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-10" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-10"&gt;&lt;/a&gt;&lt;span class="k"&gt;where&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-11" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-11" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'^[0-9a-z]{10}$'&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-12" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-12" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;display_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;display_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-13" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-13" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'2024-02-15 00:00:00'&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-14" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-14" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;suspended_at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-15" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-15" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;avatar_file_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-16" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-16" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"domain"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-17" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-17" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"domain"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-18" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-18" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-19" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-19" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="ss"&gt;"domain"&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-20" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-20" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-21" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-21" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;domain_blocks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;
&lt;a id="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-22" name="rest_code_8d839bdd6be14c29ab1d5339089c6dfa-22" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_8d839bdd6be14c29ab1d5339089c6dfa-22"&gt;&lt;/a&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="section-3"&gt;
&lt;h2&gt;3. 运行管理脚本&lt;/h2&gt;
&lt;p&gt;将&lt;a class="reference external" href="https://blog.bgme.me/listings/anti-blackcat-spam/main.py"&gt;管理脚本&lt;/a&gt;下载至本地，如需在线查看可点击&lt;a class="reference external" href="https://blog.bgme.me/listings/anti-blackcat-spam/main.py.html"&gt;此链接&lt;/a&gt;。&lt;/p&gt;
&lt;section id="section-4"&gt;
&lt;h3&gt;3.1 安装依赖&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_6da0deb883da4522a9d3abee9a350d52-1" name="rest_code_6da0deb883da4522a9d3abee9a350d52-1" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_6da0deb883da4522a9d3abee9a350d52-1"&gt;&lt;/a&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;Mastodon.py&lt;span class="w"&gt; &lt;/span&gt;beautifulsoup4
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="section-5"&gt;
&lt;h3&gt;3.2 修改管理脚本&lt;/h3&gt;
&lt;section id="domain"&gt;
&lt;h4&gt;3.2.1 修改 &lt;code class="docutils literal"&gt;DOMAIN&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;根据实际情况，将 &lt;code class="docutils literal"&gt;DOMAIN&lt;/code&gt; 设置为你需要管理的实例域名。&lt;/p&gt;
&lt;/section&gt;
&lt;section id="access-token"&gt;
&lt;h4&gt;3.2.2 修改 &lt;code class="docutils literal"&gt;ACCESS_TOKEN&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;将 &lt;a class="reference internal" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#section-2"&gt;1. 注册应用&lt;/a&gt; 中所获取的 access token 填入 &lt;code class="docutils literal"&gt;ACCESS_TOKEN&lt;/code&gt;。&lt;/p&gt;
&lt;/section&gt;
&lt;section id="accouts-csv-file"&gt;
&lt;h4&gt;3.2.3 修改 &lt;code class="docutils literal"&gt;ACCOUTS_CSV_FILE&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;将 &lt;a class="reference internal" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#spam"&gt;2. 查找疑似 SPAM 帐户&lt;/a&gt; 中所得到的 CSV 文件放到管理脚本同目录，并将 &lt;code class="docutils literal"&gt;ACCOUTS_CSV_FILE&lt;/code&gt; 修改为相应 CSV 文件的文件名。&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="section-6"&gt;
&lt;h3&gt;3.3 运行脚本&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_eeef4f23e1cc4be69c86912196f429fe-1" name="rest_code_eeef4f23e1cc4be69c86912196f429fe-1" href="https://blog.bgme.me/posts/2024/how-to-anti-spam-automatically/#rest_code_eeef4f23e1cc4be69c86912196f429fe-1"&gt;&lt;/a&gt;python&lt;span class="w"&gt; &lt;/span&gt;main.py
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;管理脚本将输出疑似 SPAM 帐户帐户名以及最新的一条嘟文以供确认，
如确认为 SPAM 帐户，管理脚本将为该 SPAM 帐户创建 Report 并转发至原站，
然后封禁所有 SPAM 帐户，
Limite 所有 SPAM 帐户所在实例。&lt;/p&gt;
&lt;img alt="/images/2024/anti-spam/python-console-1.png" src="https://blog.bgme.me/images/2024/anti-spam/python-console-1.png"&gt;
&lt;img alt="/images/2024/anti-spam/python-console-2.png" src="https://blog.bgme.me/images/2024/anti-spam/python-console-2.png"&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;hr class="docutils"&gt;
&lt;section id="section-7"&gt;
&lt;h2&gt;22时更新&lt;/h2&gt;
&lt;p&gt;之前的博文发出之后，在实际使用中发现了一些问题，于是这个脚本便有了 &lt;a class="reference external" href="https://blog.bgme.me/listings/anti-blackcat-spam/main-v2.py.html"&gt;v2&lt;/a&gt; 与 &lt;a class="reference external" href="https://blog.bgme.me/listings/anti-blackcat-spam/main-v3.py.html"&gt;v3&lt;/a&gt; 版本。&lt;/p&gt;
&lt;section id="v2-1"&gt;
&lt;h3&gt;v2 版本变化&lt;/h3&gt;
&lt;p&gt;CSV 文件名硬编码在脚本中，每次运行都要修改脚本，实在是太麻烦了。&lt;/p&gt;
&lt;p&gt;因此便有了 v2 版，通过命令行参数读取 CSV 文件名。&lt;/p&gt;
&lt;/section&gt;
&lt;section id="v3-1"&gt;
&lt;h3&gt;v3 版本变化&lt;/h3&gt;
&lt;p&gt;虽然有了管理脚本辅助，但获取CSV文件，更新管理通告都还是要打开其它程序，还是有一些不方便。&lt;/p&gt;
&lt;p&gt;于是加上了 &lt;code class="docutils literal"&gt;psycopg2&lt;/code&gt; 让脚本直接从数据库中获取数据，同时增加了更新管理通告的功能。&lt;/p&gt;
&lt;p&gt;真正实现了一条龙服务，方便到家，脚本包干。&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;</description><category>anti-spam</category><category>FediBlock</category><category>MastoAdmin</category><guid>0bfaea87-d259-4cc4-8817-b05c7e2aea82</guid><pubDate>Sun, 18 Feb 2024 04:17:18 GMT</pubDate></item></channel></rss>