跳至主要內容

一个粉丝的自我修养

bbruceyuan大约 13 分钟杂谈杂谈

1. 摘要

这篇文章主要是教铁粉在粉丝群里面布置一个主播(UP主)动态变化的QQ聊天机器人。目前使用 【插件】支持B站直播提醒,B站动态提醒,手把手教学配置。这篇文章同样给大家一个视角,没有钱的粉丝可以给你的爱豆做什么?答案是帮她做「用户拉活」,解放爱豆忘记开播提醒的烦恼。

关键词: bilibili, B站UP主,QQ聊天机器人,B站开播提醒QQ机器人,粉丝的自我修养。

2.1 作为一个粉丝能为爱豆做什么

作为一个一无是处,也没有办法给爱豆刷火箭、充舰长的普通粉丝,能为你的爱豆做什么?

1.1 刷数据

作为一个idol,她(他)需要的是曝光。需要积累更多的人气,那么在视频推荐里面完播率、转发率、弹幕、收藏、回播等信息都是一些非常重要的参考因素,因此如果你没有钱,你可以多看看idol的视频。这样对于视频网站也来,也不算是作弊,因为你本来就是喜欢这个视频,希望给idol的视频带来更大的曝光量。

1.2 用户拉活

「用户拉活」是指提高用户活跃度的意思。和它相关还有「用户拉新」,也就是增加新的用户。只要对于一个稍微有一点点名字的UP主、主播或者各类大V,都会有自己的宣传渠道,形成自己的「私域流量」,包括但不限于微信群、QQ群、公众号、抖音号等。那么显然,很多粉丝都会选择去加相应的粉丝群,但是如果不是铁粉,那么也不一定会开直播/动态提醒。那么我们就需要通过各种渠道就告诉这些「粉丝」(伪粉),你曾经喜欢的UP主开播了。那么显然会存在一部分粉丝收到提醒后就会去看直播,刷礼物,点赞相关动态。那么这种行为就是一种「用户拉活」,可以让一部分粉丝重新变得活跃起来。如果你的「私域流量」足够大,那么这种用户拉活的效果是非常显著的,可能马上就有人来给你喜欢的UP新发的动态点赞、刚开的直播刷舰长。

1.3 QQ群开播提醒机器人

为了实现某种程度上的用户拉活,这里我是想给「UP主:大豆壳子」open in new window 的粉丝群提供一个开播自动提醒的机器人,那么她的粉丝(当然主要是我),就会收到相应的提醒。这样我就可以替她挂机刷人气(原谅我并不一定有时间看)。而刚好想到 7sDreamopen in new window 以前就为他最喜欢的「Vtuber 阿夸」open in new window的粉丝群写了一个开播自动提醒的QQ聊天机器人。因此秉行着拿来主义(实际上是我不会写),我们直接用 7sDream写好的开源插件 Bilibili Activity Monitoropen in new window 跟踪哔哩哔哩UP主的最近动态。目前只有两个功能:一个是直播提醒,一个是动态提醒。

3. 部署自动提醒机器人

目前7sDream写了一个插件可以实现这个功能,所以我们需要做的就需要把它部署起来。

3.1 开发部署环境

  1. 一个QQ小号(万一腾讯把你封了可以换一个)
  2. 一台服务器(当然你要是有一个一会断电断网的普通电脑也可以)

3.2 简单知识解释

如果你是一个开发者,我建议你先看 nonebolt https://v2.nonebot.dev/open in new window 理解它们之间的关系。

简单介绍: nonebot 相当于是一个消息处理中心,收到QQ里面传过来的消息,进行命令解析,选择相应的插件处理。 cqhttp服务则是一个和腾讯服务器连接的桥梁,通过反向订阅nonebot服务,把QQ里面收到的消息发送给 nonebot,然后nonebot服务再去解析消息,选择相应的插件处理。因此部署一个QQ机器人需要两个服务,一个是 cqhttp服务和nonebot 服务。(所以只看 7sdream的插件是部署不起来的)

3.3 部署步骤

下面一共9步,手把手实现自动提醒机器人。

(1). 登录你的服务器,为你喜欢的UP主新建一个目录,这里我使用 mkdir dadou and cd dadou

dadou 是 xx up的名字。(我似乎在变相宣传???)

(2). 安装Python3.9 conda create -n dadou python=3.9 pip  和激活环境 conda activate dadou

为了方便管理,我使用 conda 进行 python版本控制,这里你也可以使用 pipenv、poetry等方式。安装3.9 是因为这个包只支持 3.9。

(3). 安装B站动态提醒插件 bilibili activity monitor. 参考 https://github.com/7sDream/nonebot-plugin-bamopen in new window里面的readme。 这里注意,7sDream 使用的 poetry 进行包和环境的管理,但是我从来没有用过,因此选择了常见的 pip 安装方式。 pip install nonebot-plugin-bam

需要注意的坑:这里 7牛只提供了 3.9 的安装支持,因此你需要使用 python 3.9。

(4). 安装 nonebot pip install nonebot2==2.0.0a10

因为nonebot2 和 nonebot 是不兼容的,因此我们需要安装 nonebot2。 另外为什么要制定版本,因为 最近版本的 log 以及 adapter等功能分出去了,7sDream暂时还没有支持新版本。

(5). 降级pydantic 使用 pip install pydantic==1.7.3  如果不降级 pydantic到这个版本,会出现如下错误。(希望你跟着一步一步坐下来,就不好出现下面这个错误了)

image.png

(6). 启用 cqhttp服务 地址:https://v2.nonebot.dev/guide/cqhttp-guide.htmlopen in new window 这是用来和腾讯QQ服务器通信的 服务器,所以需要先下载 go-cqhttp,然后运行它。(运行方式在上面的链接中有写)

这里以 go-cqhttp (opens new window)为例:
(1). 下载 go-cqhttp 对应平台的 release 文件,点此前往(opens new window)
(2). 运行 exe 文件或者使用 ./go-cqhttp 启动
(3). 生成默认配置文件并修改默认配置

其中运行第2步的时候会产生一个 config.hjson 的文件,我们需要对文件作出修改。

/*
    go-cqhttp 默认配置文件
*/
{
    // QQ号
    uin: 你的QQ号
    // QQ密码,把下面密码换成正确的密码
    password: "1235678"
    // 是否启用密码加密
    encrypt_password: false
    // 加密后的密码, 如未启用密码加密将为空, 请勿随意修改.
    password_encrypted: ""
    // 是否启用内置数据库
    // 启用将会增加10-20MB的内存占用和一定的磁盘空间
    // 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
    enable_db: true
    // 访问密钥, 强烈推荐在公网的服务器设置
    access_token: ""
    // 重连设置
    relogin: {
        // 是否启用自动重连
        // 如不启用掉线后将不会自动重连
        enabled: true
        // 重连延迟, 单位秒
        relogin_delay: 3
        // 最大重连次数, 0为无限制
        max_relogin_times: 0
    }
    // API限速设置
    // 该设置为全局生效
    // 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
    // 目前该限速设置为令牌桶算法, 请参考:
    // https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
    _rate_limit: {
        // 是否启用限速
        enabled: false
        // 令牌回复频率, 单位秒
        frequency: 1
        // 令牌桶大小
        bucket_size: 1
    }
    // 是否忽略无效的CQ码
    // 如果为假将原样发送
    ignore_invalid_cqcode: false
    // 是否强制分片发送消息
    // 分片发送将会带来更快的速度
    // 但是兼容性会有些问题
    force_fragmented: false
    // 心跳频率, 单位秒
    // -1 为关闭心跳
    heartbeat_interval: 0
    // HTTP设置
    http_config: {
        // 是否启用正向HTTP服务器
        enabled: true
        // 服务端监听地址
        host: 0.0.0.0
        // 服务端监听端口
        port: 5700
        // 反向HTTP超时时间, 单位秒
        // 最小值为5,小于5将会忽略本项设置
        timeout: 0
        // 反向HTTP POST地址列表
        // 格式:
        // {
        //    地址: secret
        // }
        post_urls: {}
    }
    // 正向WS设置 不需要,只要有反向配置就行了。
    // 反向WS设置
    ws_reverse_servers: [
        // 可以添加多个反向WS推送
        {
            // 是否启用该推送
            enabled: true
            // 反向WS Universal 地址
            // 注意 设置了此项地址后下面两项将会被忽略
            // 留空请使用 ""
            reverse_url: ws://127.0.0.1:8080/cqhttp/ws
            // 反向WS API 地址
            reverse_api_url: "" //ws://you_websocket_api.server
            // 反向WS Event 地址
            reverse_event_url: "" // ws://you_websocket_event.server
            // 重连间隔 单位毫秒
            reverse_reconnect_interval: 3000
        }
    ]
    // 上报数据类型
    // 可选: string array
    post_message_format: string
    // 是否使用服务器下发的新地址进行重连
    // 注意, 此设置可能导致在海外服务器上连接情况更差
    use_sso_address: false
    // 是否启用 DEBUG
    debug: false
    // 日志等级 trace,debug,info,warn,error
    log_level: "info"
    // WebUi 设置
    web_ui: {
        // 是否启用 WebUi
        enabled: true
        // 监听地址
        host: 127.0.0.1
        // 监听端口
        web_ui_port: 9999
        // 是否接收来自web的输入
        web_input: false
    }
}

再次 运行 ./go-cqhttp

这里一定会出现一个问题。运行滑块,填写需要的 cookies。这里只要按照提示,根据文档操作很好理解,不做过多介绍。

运行成功出现:(如果是第一次登陆,界面是不一样的,第一次登陆的时候是教你怎么把QQ用 cqhttp登上去。)

image.png

(7). 运行 nonebot 代码

新建文件 run.py ,内容如下:

import nonebot
from nonebot.adapters.cqhttp import Bot as CQHTTPBot

nonebot.init(_env_file=".env")

driver = nonebot.get_driver()
driver.register_adapter("cqhttp", CQHTTPBot)

nonebot.load_builtin_plugins()

# load other plugins

# bam need this to manage background tasks
nonebot.load_plugin("nonebot_plugin_apscheduler")
nonebot.load_plugin("nonebot_plugin_bam")

nonebot.run()

(8). 配置上面 run.py 中需要的 .env 运行环境

# 数据落地文件路径,建议设置一下。
# 用默认值(储存在内存中)的话一重启数据就没了
##### !!!!!!(不要使用 7sdream 提供的 :memory:)
BAM_DB_FILE="my_db"  

# 重启时将所有用户的直播状态设置为未开播,而不是使用上次记录的状态。
# 正常使用不要打开此选项,是调试用的
BAM_ON_STARTUP_CLEAN_LIVE_STATUS=false

# 监控任务的间隔,这里设置的是每个用户间的间隔,而不是一轮的间隔。
# 所以如果一共关注了 N 个人(多个群关注同一个人只算一个)
# 那对于每个人来说,两次检测之间的间隔就是 N * interval
# 一般来说不要设置在 5 以下,可能会被 B 站 API 反爬而拒绝响应
BAM_TASK_INTERVAL=4

# 使用那一个直播间状态查询 API,默认为 2,如果发现被封禁了可以临时调到 1 试试
BAM_LIVE_API=2

# 动态内容在发送到 QQ 时的最大长度,超过长度会截断,设置为 0 或负数表示不截断
BAM_ACTIVITY_CONTENT_MAX_LENGTH=0


HOST=127.0.0.1  # 配置 NoneBot 监听的 IP/主机名
PORT=8080  # 配置 NoneBot 监听的端口
#iDEBUG=true  # 开启 debug 模式 **请勿在生产环境开启**
###### !!!!!! 重要,这里是一个可以用来控制 机器人的用户。比如你的大号
SUPERUSERS=["你的QQ大号,或者某个群主、管理员,可多个"]  # 配置 NoneBot 超级用户
NICKNAME=["awesome_bot"]  # 配置机器人的昵称
COMMAND_START=["/"]  # 配置命令起始字符
COMMAND_SEP=["/"]  # 配置命令分割字符

# Custom Configs
CUSTOM_CONFIG1=""
CUSTOM_CONFIG2=  # 留空则从系统环境变量读取,如不存在则为空字符串

(9). 运行 run.py 使用 python run.py

image.png

出现如下界面:打码的部分是你的QQ机器人,也就是你的小号。

然后就成功了,大功告成!!

4. 订阅你喜欢的UP主

具体的命令参见:https://github.com/7sDream/nonebot-plugin-bamopen in new window 提到的命令列表。这应该能看的懂吧,可不懂给7sDream提 issue啊(误)

一共有两种方式:使用 superuser 私聊这个QQ群聊,一种是直接在群里@这个QQ机器人。

私聊的时候不需要ATQQ机器人,在群里就需要AT。

4.1 示例

比如你想在你的群里订阅 豆子的直播和动态,

  1. 加入大豆的粉丝群
  2. 邀请你的大号以及QQ小号(机器人)进群
  3. 使用如下命令:(@bot 的意思是使用大号 AT QQ机器人。)

@bot /bam/group/add  @bot /bam/follower/add 244057180

解释:后面这一串数字就是 > 大豆壳子主页连接 https://space.bilibili.com/244057180/open in new window] 的 uid。

欢迎关注~ 这是我作为一个三无粉丝唯一能做的。

5. 后记

我从来不是一个合格的粉丝。我记得大四的时候,我们寝室一起在看《创造101》open in new window,那个时候就非常喜欢「段奥娟」open in new window,但是到现在我已经几乎认不出她了。(尽管我也有关注她的微博)

我所羡慕的两个人:(因为感觉追星似乎挺有意思的)

室友佳哥。佳哥是一个经常吐槽我是一个伪粉的人。因为曾经我们一起看101的时候,我只关注段奥娟的表演节目,一些琐碎的日常视频也不看,也不打榜,也经常脸盲认不出人。而佳哥应该也不再追吴宣仪和孟美岐了,现在喜欢上了青春有你里面的 谢可寅open in new window。本科毕业之后追星行为更加疯狂,包括但不限于买爱豆代言的东西、充钱打榜、看线下线上演唱会(VIP座)。但是我觉得他很快乐,嗯是的,追星好像是快乐的。

技术大佬7sDream。7sDream是一个大牛逼,在互联网公司过着公务员的生活(只是因为他效率太高了而已)。每天高强度看Vtuber,尤其是阿夸,每次有关于虚拟偶像的事情都要在群里分享,感觉每天无欲无求,曾经他说过要不要一起来看 Vtuber,可我实在感受不到他看V的快乐。不过能体会到他每次分享这些消息的时候是非常欣喜,在支持关注一个事件的发展(当然对其他事情也是如此)。

我之所以这么做就是因为受他们的影响,感觉可以给自己的业余时间找点事情来做,这样就不至于每天陷入忙碌的焦虑以及痛苦之中,毕竟看好看的小姐姐聊天还是很有意思的。虽然如果当天装束我不喜欢,我就不看了(我果然还是伪粉),这样就能做到一种很随意。毕竟你也不认识ta,看不看对方也不会在意。而自己作为观众来说,似乎能从中感到到一丝的自由。