renderTip function

String renderTip(
  1. DRObject message, {
  2. required NameOf nameOf,
  3. String? self,
  4. DRLocale locale = zhCN,
})

群提示的文字(《消息/3.接口设计》第 12.3 节的各种 kind)。self 为本人时显示“你”。

Implementation

String renderTip(DRObject message, {required NameOf nameOf, String? self, DRLocale locale = zhCN}) {
  final l = locale;
  final b = _body(message);
  String name(String u) => self != null && u == self ? l.you : nameOf(u);
  final operator = b['operator'] is String ? name(b['operator']! as String) : '';
  String fill(String key, Map<String, String> values) => formatTemplate(_t(l.tip, key), values);
  final hasOperator = b['operator'] is String && (b['operator']! as String).isNotEmpty;
  switch (b['kind']) {
    case 'group_created':
      return fill('group_created', {'operator': operator});
    case 'members_joined':
      final members = _names(b['members'], b['joined_count'], name, l);
      if (!hasOperator) return fill('members_joined', {'members': members});
      if (b['joined_via'] == 'link') return fill('members_joined_link', {'members': members, 'operator': operator});
      return fill('members_joined_invited', {'members': members, 'operator': operator});
    case 'members_left':
      return fill('members_left', {'members': _names(b['members'], b['removed_count'], name, l)});
    case 'members_removed':
      final members = _names(b['members'], b['removed_count'], name, l);
      return hasOperator ? fill('members_removed', {'members': members, 'operator': operator}) : fill('members_removed_system', {'members': members});
    case 'group_renamed':
      return fill('group_renamed', {'operator': operator, 'name': '${b['name'] ?? ''}'});
    case 'announcement_updated':
      return fill('announcement_updated', {'operator': operator});
    case 'owner_changed':
      return fill('owner_changed', {'owner': b['owner'] is String ? name(b['owner']! as String) : l.deletedUser});
    case 'mute_all_changed':
      return fill(b['enabled'] == true ? 'mute_all_on' : 'mute_all_off', {'operator': operator});
    case 'group_status_changed':
      return _t(l.tip, b['status'] == 'disabled' ? 'group_disabled' : 'group_enabled');
    case 'group_dismissed':
      return _t(l.tip, 'group_dismissed');
    default:
      return _t(l.tip, 'unknown');
  }
}