Flutter文本解析模式设置插件parse_mode_setter的使用

Flutter文本解析模式设置插件parse_mode_setter的使用

ParseModeSetter for Televerse

Dart Televerse Version

Overview

通过使用ParseModeSetter插件,可以简化你的Televerse机器人开发。ParseModeSetter是一个Transformer插件,它自动化了各种API方法的解析模式设置。这确保了消息格式的一致性,无需每次手动指定解析模式。它简化了你的代码并节省了宝贵的时间。

安装

  1. 使用Dart的包管理器将parse_mode_setter包添加到你的项目中:
dart pub add parse_mode_setter

使用

示例

以下是一个代码片段,展示了如何将ParseModeSetter与你的Televerse机器人集成:

import 'dart:io';
import 'package:parse_mode_setter/parse_mode_setter.dart';
import 'package:televerse/televerse.dart';

final bot = Bot(Platform.environment["BOT_TOKEN"]!);

void main(List<String> args) {
  // 将ParseModeSetter附加到bot上,并设置解析模式为HTML。
  bot.use(ParseModeSetter(ParseMode.html));

  bot.command('start', (ctx) async {
    // 在方法中使用HTML格式化文本,无需担心解析模式。
    await ctx.reply(
      "Hello <b>World</b>\n\nThis is a <i>great story of the Detective Rajappan</i>. I hope you've heard of Rajappan. Well, if you haven't, he's a <tg-spoiler>super detective.</tg-spoiler>",
    );
  });

  bot.start();
}

配置

你可以通过以下属性自定义ParseModeSetter类:

  • allowedMethods: 允许设置解析模式的API方法列表。默认值为:
    [
      APIMethod.sendMessage,
      APIMethod.copyMessage,
      APIMethod.sendPhoto,
      APIMethod.sendAudio,
      APIMethod.sendDocument,
      APIMethod.sendVideo,
      APIMethod.sendAnimation,
      APIMethod.sendVoice,
      APIMethod.sendPoll,
      APIMethod.editMessageText,
      APIMethod.editMessageCaption,
      APIMethod.answerInlineQuery,
      APIMethod.editMessageMedia,
      APIMethod.sendMediaGroup,
    ],
    
  • disallowedMethods: 不允许设置解析模式的API方法列表。默认为空列表。
  • setQuestionParseMode: 布尔值,表示是否为投票问题设置解析模式。默认为true
  • setExplanationParseMode: 布尔值,表示是否为投票解释设置解析模式。默认为true

示例配置

final parseModeSetter = ParseModeSetter(
  ParseMode.markdown,
  allowedMethods: [APIMethod.sendMessage, APIMethod.sendPhoto],
  disallowedMethods: [APIMethod.sendVoice],
  setQuestionParseMode: true,
  setExplanationParseMode: false,
);

bot.use(parseModeSetter);

在这个配置中:

  • 解析模式被设置为Markdown用于sendMessagesendPhoto方法。
  • 解析模式明确不设置用于sendVoice方法。
  • 解析模式设置用于投票问题但不用于投票解释。

理解解析模式

Telegram Bot API支持基本的消息格式化,包括加粗、斜体、下划线、删除线、隐藏文字、引用块、内联链接和预格式化代码。Telegram客户端会相应地渲染这些样式。你可以在文本中直接指定这些实体或使用Markdown风格或HTML风格的格式化。

贡献

我们非常感谢你对ParseModeSetter的兴趣!如果你发现它很有用,请考虑给仓库点星。如果你有任何问题或建议,欢迎在GitHub上报告或提出。

开始使用Televerse

有关Televerse(本插件使用的Telegram Bot API库)的更多信息,请访问其官方仓库

感谢使用ParseModeSetter!希望它能简化你的Televerse机器人开发体验。


示例代码

import 'dart:io';

import 'package:parse_mode_setter/parse_mode_setter.dart';
import 'package:televerse/telegram.dart';
import 'package:televerse/televerse.dart';

final bot = Bot(Platform.environment["BOT_TOKEN"]!);

void main(List<String> args) {
  // 附加Parse Mode Setter并传递必要的参数。
  // 这里我们将解析模式设置为HTML。
  bot.use(ParseModeSetter(ParseMode.html));

  bot.command('start', (ctx) async {
    // 现在可以在方法中使用HTML文本,不必担心不传递解析模式
    await ctx.reply(htmlText());
  });

  bot.onInlineQuery((ctx) async {
    final results = InlineQueryResultBuilder().article(
      "test-id",
      "Hello",
      (content) => content.text(htmlText()),
    );
    await ctx.answerInlineQuery(results.build());
  });

  bot.command('group', (ctx) async {
    await ctx.replyWithMediaGroup([
      InputMediaPhoto(
        media: InputFile.fromUrl(
          "https://televerse-space.web.app/example/photo.jpg",
        ),
        caption: htmlText(),
      ),
      InputMediaPhoto(
        media: InputFile.fromUrl(
          "https://televerse-space.web.app/example/photo.jpg",
        ),
      ),
    ]);
  });

  bot.start();
}

String htmlText() {
  return """<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<u>underline</u>, <ins>underline</ins>
<s>strikethrough</s>, <strike>strikethrough</strike>, <del>strikethrough</del>
<span class="tg-spoiler">spoiler</span>, <tg-spoiler>spoiler</tg-spoiler>
<b>bold <i>italic bold <s>italic bold strikethrough <span class="tg-spoiler">italic bold strikethrough spoiler</span></s> <u>underline italic bold</u></i> bold</b>
<a href="http://www.example.com/">inline URL</a>
<a href="tg://user?id=123456789">inline mention of a user</a>
<tg-emoji emoji-id="5368324170671202286">👍</tg-emoji>
<code>inline fixed-width code</code>
<pre>pre-formatted fixed-width code block</pre>
<pre><code class="language-python">pre-formatted fixed-width code block written in the Python programming language</code></pre>
<blockquote>Block quotation started
Block quotation continued
The last line of the block quotation</blockquote>
<blockquote expandable>Expandable block quotation started
Expandable block quotation continued
Expandable block quotation continued
Hidden by default part of the block quotation started
Expandable block quotation continued
The last line of the block quotation</blockquote>""";
}

更多关于Flutter文本解析模式设置插件parse_mode_setter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本解析模式设置插件parse_mode_setter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用parse_mode_setter插件(假设这是一个假想的插件,因为实际上没有一个名为parse_mode_setter的广泛认可的Flutter插件)来设置文本解析模式的示例代码。如果parse_mode_setter是一个实际存在的插件,它的具体用法可能会有所不同,但以下代码提供了一个通用的模式,你可以根据插件的实际API进行调整。

假设的parse_mode_setter插件使用示例

  1. 添加依赖

    首先,你需要在pubspec.yaml文件中添加该插件的依赖(如果它是一个真实存在的插件):

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

    然后运行flutter pub get来安装依赖。

  2. 导入插件

    在你的Dart文件中导入该插件:

    import 'package:parse_mode_setter/parse_mode_setter.dart';
    
  3. 使用插件

    假设parse_mode_setter插件提供了一个ParseModeSetter类,该类允许你设置和获取文本的解析模式。以下是一个示例代码,展示了如何使用这个插件:

    import 'package:flutter/material.dart';
    import 'package:parse_mode_setter/parse_mode_setter.dart';  // 假设的导入
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Parse Mode Setter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      ParseModeSetter? _parseModeSetter;
    
      @override
      void initState() {
        super.initState();
        // 初始化ParseModeSetter实例,假设有一个默认的构造函数
        _parseModeSetter = ParseModeSetter();
    
        // 设置解析模式,这里假设有一个枚举ParseMode和一个设置方法setParseMode
        _parseModeSetter?.setParseMode(ParseMode.MARKDOWN);  // 替换为实际的枚举值和方法
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Parse Mode Setter Demo'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  '当前解析模式: ${_parseModeSetter?.currentParseMode ?? "未设置"}',
                  style: TextStyle(fontSize: 24),
                ),
                ElevatedButton(
                  onPressed: () {
                    setState(() {
                      // 切换解析模式,这里假设有一个切换方法toggleParseMode
                      _parseModeSetter?.toggleParseMode();  // 替换为实际的方法
                    });
                  },
                  child: Text('切换解析模式'),
                ),
              ],
            ),
          ),
        );
      }
    
      // 假设ParseMode是一个枚举,用于表示不同的解析模式
      enum ParseMode { PLAIN_TEXT, MARKDOWN, HTML }
    
      // 假设ParseModeSetter类具有以下方法
      class ParseModeSetter {
        ParseMode _currentMode = ParseMode.PLAIN_TEXT;
    
        ParseMode get currentParseMode => _currentMode;
    
        void setParseMode(ParseMode mode) {
          _currentMode = mode;
        }
    
        void toggleParseMode() {
          setParseMode(_currentMode == ParseMode.PLAIN_TEXT ? ParseMode.MARKDOWN : ParseMode.PLAIN_TEXT);
          // 你可以根据需要添加更多的切换逻辑
        }
      }
    }
    

注意事项

  • 上面的代码是一个假设的示例,因为实际上没有一个名为parse_mode_setter的广泛认可的Flutter插件。
  • 如果parse_mode_setter是一个真实存在的插件,你应该查阅它的官方文档以了解如何正确初始化和使用它。
  • 枚举ParseMode和类ParseModeSetter是假设的,你应该根据插件的实际API进行调整。
  • 在真实的应用中,你可能需要处理更多的错误情况和边界条件。
回到顶部