Flutter TMI插件功能的探索与使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter TMI插件功能的探索与使用

tmi.dart简介

tmi.dart 是一个用于Twitch Messaging Interface (Twitch.tv) 的Dart库。它允许开发者通过Dart语言与Twitch聊天进行交互,监听和处理各种聊天事件。目前该项目仍在开发中,建议不要在生产环境中使用。

项目背景

该项目由Ricardo Markiewicz开发,灵感来源于Node.js中的TMI.js项目,后者是专门为Twitch聊天设计的Node.js包。

快速上手

要开始使用tmi.dart,首先需要安装依赖,创建客户端并开始监听聊天事件。以下是一个简单的示例代码:

import 'package:tmi/tmi.dart' as tmi;

void main() {
  // 创建一个TMI客户端,连接到指定的频道
  var client = tmi.Client(
    channels: "androidedelvalle",  // 指定要连接的Twitch频道
    secure: true,  // 使用安全连接
  );

  // 连接到Twitch服务器
  client.connect();

  // 监听消息事件
  client.on("message", (channel, userstate, message, self) {
    if (self) return;  // 如果是自己发送的消息,忽略

    // 打印接收到的消息
    print("${channel}| ${userstate['display-name']}: ${message}");
  });

  // 监听用户加入事件
  client.on("join", (channel, username, self) {
    if (!self) {
      print("${channel}> ${username} 加入了房间");
    }
  });

  // 监听突袭事件
  client.on("raided", (channel, username, viewers, userstate) {
    print("${channel}> === 突袭 === ${viewers} 来自 ${username}");
  });

  // 监听续订订阅事件
  client.on("resub", (channel, username, streakMonths, msg, userstate, methods) {
    print("${channel}> CAPO $username 续订了 $streakMonths 个月!: $msg");
  });

  // 监听新订阅事件
  client.on("subscription", (channel, username, methods, msg, userstate) {
    print("${channel}>>> 新订阅: $username");
  });

  // 监听房间状态变化事件
  client.on("roomstate", (channel, tags) {
    print("${channel} JOINING $tags");
  });

  // 监听PONG事件(心跳响应)
  client.on("pong", (latency) {
    print("PONG 延迟: $latency");
  });

  // 监听通知事件
  client.on("notice", (channel, msgid, message) {
    print("~~~~ $msgid ----> $message");
  });
}

当前支持的事件

tmi.dart 目前支持以下事件(未来可能会添加更多事件):

  • connecting:正在连接到Twitch服务器
  • logon:成功登录
  • ping:收到PING请求
  • pong:收到PONG响应
  • connected:成功连接到指定频道
  • resub:用户续订订阅
  • subanniversary:订阅周年纪念
  • subscription:新用户订阅
  • subgift:用户赠送订阅
  • anonsubgift:匿名用户赠送订阅
  • submysterygift:神秘礼物订阅
  • anonsubmysterygift:匿名神秘礼物订阅
  • primepaidupgrade:Prime订阅升级
  • giftpaidupgrade:赠送订阅升级
  • anongiftpaidupgrade:匿名赠送订阅升级
  • raided:频道被突袭
  • unhost:取消托管
  • hosting:正在托管其他频道
  • messagedeleted:消息被删除
  • roomstate:房间状态变化
  • names:获取房间内的用户列表
  • join:用户加入房间
  • part:用户离开房间
  • whisper:私信
  • message:普通聊天消息
  • hosted:频道被其他频道托管
  • cheer:用户发送Bits
  • action:用户发送动作消息
  • chat:通用聊天事件
  • raw_message:原始消息

示例Demo

为了帮助你更好地理解如何使用tmi.dart,以下是一个完整的示例demo,展示了如何连接到Twitch频道并处理多种事件:

import 'package:tmi/tmi.dart' as tmi;

void main() {
  // 创建TMI客户端,连接到指定的Twitch频道
  var client = tmi.Client(
    channels: ["duendepablo"],  // 可以指定多个频道
    secure: true,  // 使用安全连接
  );

  // 连接到Twitch服务器
  client.connect();

  // 监听消息事件
  client.on("message", (channel, userstate, message, self) {
    if (self) return;  // 如果是自己发送的消息,忽略

    // 打印接收到的消息
    print("${channel}| ${userstate['display-name']}: ${message}");
  });

  // 监听用户加入事件
  client.on("join", (channel, username, self) {
    if (!self) {
      print("${channel}> ${username} 加入了房间");
    }
  });

  // 监听突袭事件
  client.on("raided", (channel, username, viewers, userstate) {
    print("${channel}> === 突袭 === ${viewers} 来自 ${username}");
  });

  // 监听续订订阅事件
  client.on("resub", (channel, username, streakMonths, msg, userstate, methods) {
    print("${channel}> CAPO $username 续订了 $streakMonths 个月!: $msg");
  });

  // 监听新订阅事件
  client.on("subscription", (channel, username, methods, msg, userstate) {
    print("${channel}>>> 新订阅: $username");
  });

  // 监听房间状态变化事件
  client.on("roomstate", (channel, tags) {
    print("${channel} JOINING $tags");
  });

  // 监听PONG事件(心跳响应)
  client.on("pong", (latency) {
    print("PONG 延迟: $latency");
  });

  // 监听通知事件
  client.on("notice", (channel, msgid, message) {
    print("~~~~ $msgid ----> $message");
  });

  // 监听用户离开事件
  client.on("part", (channel, username, self) {
    if (!self) {
      print("${channel}> ${username} 离开了房间");
    }
  });

  // 监听私信事件
  client.on("whisper", (from, to, message) {
    print("私信来自 ${from}: ${message}");
  });

  // 监听Cheer事件(用户发送Bits)
  client.on("cheer", (channel, userstate, message) {
    print("${channel}> ${userstate['display-name']} 发送了 ${userstate['bits']} Bits: ${message}");
  });

  // 监听动作消息事件
  client.on("action", (channel, userstate, message) {
    print("${channel}> *${userstate['display-name']}* ${message}");
  });
}

更多关于Flutter TMI插件功能的探索与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter TMI插件功能的探索与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter TMI 插件功能的探索与使用

在Flutter应用中集成和使用第三方插件可以极大地扩展应用的功能。TMI(Tencent Media Interface)插件通常用于与腾讯云的媒体服务进行交互,比如直播、音视频通话等。尽管没有直接名为“TMI”的官方Flutter插件,但我们可以假设你指的是与腾讯云的媒体服务相关的插件或SDK。

以下是一个假设性的示例,展示如何在Flutter中集成和使用一个与腾讯云媒体服务相关的插件。这个示例将涵盖基本的初始化、登录和媒体播放功能。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加相应的依赖。由于腾讯云的具体Flutter插件可能不是官方的,你可能需要查找并添加第三方插件,或者使用平台通道与原生代码交互。这里我们假设有一个名为tencent_cloud_media的插件。

dependencies:
  flutter:
    sdk: flutter
  tencent_cloud_media: ^x.y.z  # 替换为实际的版本号

2. 初始化插件

在你的Flutter应用中,初始化插件并配置必要的参数,比如SDK密钥、用户信息等。

import 'package:flutter/material.dart';
import 'package:tencent_cloud_media/tencent_cloud_media.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    // 初始化SDK
    TencentCloudMedia.initialize(
      sdkAppId: 'YOUR_SDK_APP_ID',  // 替换为你的SDK App ID
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Tencent Cloud Media Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 登录操作
              await TencentCloudMedia.login(
                userId: 'USER_ID',  // 替换为用户ID
                userSig: 'USER_SIG', // 替换为用户签名
              );
              // 后续操作,如加入房间等
              // TencentCloudMedia.joinRoom(...);
            },
            child: Text('Login'),
          ),
        ),
      ),
    );
  }
}

3. 实现媒体播放功能

在登录成功后,你可以实现加入房间、播放媒体等功能。以下是一个简单的示例,展示如何加入房间并开始播放视频。

class _MyAppState extends State<MyApp> {
  // ... 其他代码 ...

  void joinRoomAndPlayMedia() async {
    try {
      // 加入房间
      await TencentCloudMedia.joinRoom(
        roomId: 'ROOM_ID',  // 替换为房间ID
        role: Role.Audience, // 角色,如观众或主播
      );

      // 开始播放视频(假设有一个开始播放的方法)
      await TencentCloudMedia.startPlayingVideo();

      // 其他操作,如显示视频视图等
      // ...
    } catch (e) {
      print('Error joining room: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Tencent Cloud Media Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  await TencentCloudMedia.login(
                    userId: 'USER_ID',
                    userSig: 'USER_SIG',
                  );
                  joinRoomAndPlayMedia();
                },
                child: Text('Login and Join Room'),
              ),
              // 假设有一个视频视图组件
              // TencentCloudMediaVideoView(),
            ],
          ),
        ),
      ),
    );
  }
}

注意

  1. 上述代码是假设性的,因为具体的腾讯云媒体服务插件可能有不同的API和初始化方法。
  2. 你需要查阅腾讯云媒体服务的官方文档,以获取准确的SDK集成和API使用方法。
  3. 可能需要处理更多的错误和状态管理,特别是在生产环境中。
  4. 视频视图组件(如TencentCloudMediaVideoView)是假设存在的,实际使用中可能需要根据插件提供的组件或自定义实现。

希望这个示例能帮助你开始探索和使用与腾讯云媒体服务相关的Flutter插件。如果你有具体的插件或SDK,建议查阅其官方文档和示例代码。

回到顶部