• 注册
  • 一般交流 一般交流 关注:6145 内容:9726

    【直播工具】塔科夫弹幕通知 for 哔哩哔哩

  • 查看作者
  • 打赏作者
  • 当前位置: ODDBA社区 > 离线版交流区 > 一般交流 > 正文
  • 12
  • 一般交流
  • 渐入佳境
    2021
    该内容使用了刷新卡,原发布时间:4星期前

    正式版发布地址 https://play-live.bilibili.com/details/1772127832661?from=1

    以下为测试版时期内容

    —————————————————————————

    【直播工具】塔科夫弹幕通知 for 哔哩哔哩

    沉浸式塔科夫直播弹幕(

    2026.1.20最新进度

    【直播工具】塔科夫弹幕通知 for 哔哩哔哩

    理论上只要有右下角提示的版本都能用……吧?

    测试版,解压进Client.0.16.9.0.40087\BepInEx\plugins

    DanMuNotifier.zip
    12.38 KB,下载次数:6[记录]

    模拟发送器

    DanMuPipeTestClient.zip
    80.74 KB,下载次数:5[记录]

    由于各个直播平台的开放接口不同,请自行使用命名管道转发到bepinex,参考模拟发送器,以下是模拟发送器的源码。此外,即便eft的代码中存在Achievement图标类型,但是实际该图标不存在,所以去除了这个类型。

    using System;
    using System.IO;
    using System.IO.Pipes;
    using System.Text;
    using System.Text.Json;
    using System.Threading;
    
    namespace DanMuPipeTestClient
    {
        internal static class Program
        {
            private const string PipeName = "DanMuNotifierPipe";
            private static readonly Random Rng = new();
    
            private static readonly string[] DurationTypes =
            {
                "Default",
                "Long",
                "Infinite"
            };
    
            private static readonly string[] IconTypes =
            {
                "Default",
                "Alert",
                "Friend",
                "Mail",
                "Note",
                "Quest",
                "EntryPoint",
                "RagFair",
                "Hideout",
                "WishlistQuest",
                "WishlistHideout",
                "WishlistTrading",
                "WishlistEquipment",
                "WishlistOther"
            };
    
            static void Main()
            {
                Console.WriteLine("DanMu Pipe Test Client started.");
                Console.WriteLine("Server may start later. Messages are best-effort.\n");
    
                while (true)
                {
                    var msg = BuildRandomMessage();
    
                    if (TrySend(msg))
                    {
                        Console.WriteLine($"[发送成功] {msg.Msg}");
                    }
                    else
                    {
                        Console.WriteLine($"[丢弃] Server 未就绪");
                    }
    
                    Thread.Sleep(TimeSpan.FromSeconds(3));
                }
            }
    
            private static bool TrySend(DanMuJson msg)
            {
                try
                {
                    using var pipe = new NamedPipeClientStream(
                        ".",
                        PipeName,
                        PipeDirection.Out,
                        PipeOptions.None
                    );
    
                    // 关键点:短超时,避免卡死
                    pipe.Connect(timeout: 500);
    
                    using var writer = new StreamWriter(pipe, Encoding.UTF8)
                    {
                        AutoFlush = true
                    };
    
                    var json = JsonSerializer.Serialize(msg);
                    writer.WriteLine(json);
    
                    return true;
                }
                catch (TimeoutException)
                {
                    return false;
                }
                catch (IOException)
                {
                    return false;
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"[异常] {ex.Message}");
                    return false;
                }
            }
    
            private static DanMuJson BuildRandomMessage()
            {
                return new DanMuJson
                {
                    Msg = $"测试弹幕 {DateTime.Now:HH:mm:ss}",
                    Duration = DurationTypes[Rng.Next(DurationTypes.Length)],
                    IconType = IconTypes[Rng.Next(IconTypes.Length)],
                    Color = new[]
                    {
                        Rng.Next(80, 256),
                        Rng.Next(80, 256),
                        Rng.Next(80, 256)
                    }
                };
            }
    
            private sealed class DanMuJson
            {
                public string Msg { get; set; } = string.Empty;
                public string IconType { get; set; } = "Default";
                public string Duration { get; set; } = "Default";
                public int[] Color { get; set; } = Array.Empty<int>();
            }
        }
    }

    自成一派
    打赏了1金币
    回复
    渐入佳境
    VIP3

    WS走API?

  • sovz114514命名管道,不走网络层
    拉黑 4星期前 电脑端回复
  • 千叶玲花 @sovz114514 那是啥?
    拉黑 4星期前 电脑端回复
  • sovz114514 @千叶玲花 通信协议
    拉黑 4星期前 电脑端回复
  • 回复
    渐入佳境
    VIP3

    achievement不是不存在,是会从数据源读东西,读取的是成就图标和名字,就是跳成就的播报

  • 千叶玲花然后这个玩意又是尼基塔经典的不做约束,图标超过大小就会超出范围。。。
    拉黑 4星期前 电脑端回复
  • sovz114514不是吧?成就的通知不是那种大的吗?应该走的不是这个通用的通知吧。然后你如果只是自己用的话,当然可以直接把弹幕逻辑内嵌进mod里,主要就是纯dll不能上架直播平台的插件中心。
    拉黑 4星期前 电脑端回复
  • 千叶玲花 @sovz114514 oo这样
    拉黑 4星期前 电脑端回复
  • 千叶玲花 @sovz114514 按理说是一个方法啊....或者有重写吧可能, 我没仔细研究过, 拿来debug/弹一些提示倒是挺好用的
    拉黑 4星期前 电脑端回复
  • 回复
    渐入佳境
    VIP3

    话说这个走WS的话可以纯客户端实现吧?改天我写个和b站对接的试试看

  • sovz114514这个是B站的官方demo,如果只是自用可以申请个开发者直接用https://open-live.bilibili.com/document/cca272c5-e49d-6bea-0fbe-23c37288a08a#h1-openblive 这是半官方的开源弹幕姬,用的是网页的接口,不知道有什么限制https://github.com/copyliu/bililive_dm
    拉黑 3星期前 电脑端回复
  • 回复

    请登录之后再进行评论

    登录
    离线版交流区
  • 今日 0
  • 内容 11297
  • 关注 6145
  • 聊天
    关注 143

    【招募】GRIFFIN TKF项目开工 期待你的加入 || 你是否想加入格里芬书写自己与人形的故事

    捐助我们

    • 微信
    • 支付宝
  • 签到
  • 任务
  • 发布
  • 模式切换
  • 偏好设置
  • 帖子间隔 侧栏位置: