Merge branch 'main' into reorganize-extensions

pull/1183/head
Kelrap 1 year ago
commit 7d69c33bc3

@ -3945,6 +3945,21 @@
"accuracy": "Accuracy",
"points": "Points",
"noPaymentInfo": "No payment info necessary!",
"conversationBotModeSelectDescription": "Bot mode",
"conversationBotModeSelectOption_discussion": "Discussion",
"conversationBotModeSelectOption_custom": "Custom",
"conversationBotModeSelectOption_conversation": "Conversation",
"conversationBotModeSelectOption_textAdventure": "Text Adventure",
"conversationBotDiscussionZone_title": "Discussion Settings",
"conversationBotDiscussionZone_discussionTopicLabel": "Discussion Topic",
"conversationBotDiscussionZone_discussionTopicPlaceholder": "Set Discussion Topic",
"conversationBotDiscussionZone_discussionKeywordsLabel": "Discussion Keywords",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Set Discussion Keywords",
"conversationBotDiscussionZone_discussionKeywordsHintText": "Comma separated list of keywords to guide the discussion",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Send discussion prompt on a schedule",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Hours between discussion prompts",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Send discussion prompt when user reacts ⏩ to bot message",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaction to send discussion prompt",
"studentAnalyticsNotAvailable": "Student data not currently available",
"roomDataMissing": "Some data may be missing from rooms in which you are not a member.",
"updatePhoneOS": "You may need to update your device's OS version.",

@ -4634,5 +4634,22 @@
"points": "Puntos",
"noPaymentInfo": "No se necesitan datos de pago.",
"updatePhoneOS": "Puede que necesites actualizar la versión del sistema operativo de tu dispositivo.",
"wordsPerMinute": "Palabras por minuto"
"wordsPerMinute": "Palabras por minuto",
"conversationBotModeSelectDescription": "Modo bot",
"conversationBotModeSelectOption_discussion": "Debate",
"conversationBotModeSelectOption_custom": "A medida",
"conversationBotModeSelectOption_conversation": "Conversación",
"conversationBotModeSelectOption_textAdventure": "Aventura textual",
"conversationBotDiscussionZone_title": "Configuración del debate",
"conversationBotDiscussionZone_discussionTopicLabel": "Tema de debate",
"conversationBotDiscussionZone_discussionTopicPlaceholder": "Establecer tema de debate",
"conversationBotDiscussionZone_discussionKeywordsLabel": "Palabras clave del debate",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Establecer palabras clave de debate",
"conversationBotDiscussionZone_discussionKeywordsHintText": "Lista de palabras clave separadas por comas para orientar el debate",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Enviar mensajes de debate según un calendario",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas entre temas de debate",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Enviar aviso de discusión cuando el usuario reacciona ⏩ al mensaje del bot.",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reacción al envío del aviso de debate",
"studentAnalyticsNotAvailable": "Datos de los estudiantes no disponibles actualmente",
"roomDataMissing": "Es posible que falten algunos datos de las salas de las que no es miembro."
}

@ -113,7 +113,11 @@ class IgcController {
),
);
igcTextData!.matches[matchIndex].match = response.span;
try {
igcTextData!.matches[matchIndex].match = response.span;
} catch (err, s) {
ErrorHandler.logError(e: err, s: s);
}
choreographer.setState();
}

@ -96,7 +96,17 @@ class ModelKey {
// bot options
static const String languageLevel = "difficulty";
static const String conversationTopic = "conversation_topic";
static const String keywords = "keywords";
static const String safetyModeration = "safety_moderation";
static const String mode = "mode";
static const String custom = "custom";
static const String discussionTopic = "discussion_topic";
static const String discussionKeywords = "discussion_keywords";
static const String discussionTriggerScheduleEnabled =
"discussion_trigger_schedule_enabled";
static const String discussionTriggerScheduleHourInterval =
"discussion_trigger_schedule_hour_interval";
static const String discussionTriggerReactionEnabled =
"discussion_trigger_reaction_enabled";
static const String discussionTriggerReactionKey =
"discussion_trigger_reaction_key";
}

@ -12,7 +12,8 @@ extension PangeaClient2 on Client {
.toList();
Future<List<Room>> get _classesAndExchangesImTeaching async {
for (final Room space in rooms.where((room) => room.isSpace)) {
final allSpaces = rooms.where((room) => room.isSpace);
for (final Room space in allSpaces) {
if (space.getState(EventTypes.RoomPowerLevels) == null) {
await space.postLoad();
}

@ -12,20 +12,45 @@ class BotOptionsModel {
String topic;
List<String> keywords;
bool safetyModeration;
String mode;
String? custom;
String? discussionTopic;
String? discussionKeywords;
bool? discussionTriggerScheduleEnabled;
int? discussionTriggerScheduleHourInterval;
bool? discussionTriggerReactionEnabled;
String? discussionTriggerReactionKey;
BotOptionsModel({
this.languageLevel,
this.topic = "General Conversation",
this.keywords = const [],
this.safetyModeration = true,
this.mode = "discussion",
this.custom = "",
this.discussionTopic,
this.discussionKeywords,
this.discussionTriggerScheduleEnabled,
this.discussionTriggerScheduleHourInterval,
this.discussionTriggerReactionEnabled,
this.discussionTriggerReactionKey,
});
factory BotOptionsModel.fromJson(json) {
return BotOptionsModel(
languageLevel: json[ModelKey.languageLevel],
topic: json[ModelKey.conversationTopic] ?? "General Conversation",
keywords: (json[ModelKey.keywords] ?? []).cast<String>(),
safetyModeration: json[ModelKey.safetyModeration] ?? true,
mode: json[ModelKey.mode] ?? "discussion",
custom: json[ModelKey.custom],
discussionTopic: json[ModelKey.discussionTopic],
discussionKeywords: json[ModelKey.discussionKeywords],
discussionTriggerScheduleEnabled:
json[ModelKey.discussionTriggerScheduleEnabled],
discussionTriggerScheduleHourInterval:
json[ModelKey.discussionTriggerScheduleHourInterval],
discussionTriggerReactionEnabled:
json[ModelKey.discussionTriggerReactionEnabled],
discussionTriggerReactionKey: json[ModelKey.discussionTriggerReactionKey],
);
}
@ -34,9 +59,19 @@ class BotOptionsModel {
try {
// data[ModelKey.isConversationBotChat] = isConversationBotChat;
data[ModelKey.languageLevel] = languageLevel;
data[ModelKey.conversationTopic] = topic;
data[ModelKey.keywords] = keywords;
data[ModelKey.safetyModeration] = safetyModeration;
data[ModelKey.mode] = mode;
data[ModelKey.custom] = custom;
data[ModelKey.discussionTopic] = discussionTopic;
data[ModelKey.discussionKeywords] = discussionKeywords;
data[ModelKey.discussionTriggerScheduleEnabled] =
discussionTriggerScheduleEnabled;
data[ModelKey.discussionTriggerScheduleHourInterval] =
discussionTriggerScheduleHourInterval;
data[ModelKey.discussionTriggerReactionEnabled] =
discussionTriggerReactionEnabled;
data[ModelKey.discussionTriggerReactionKey] =
discussionTriggerReactionKey;
return data;
} catch (e, s) {
debugger(when: kDebugMode);
@ -51,15 +86,33 @@ class BotOptionsModel {
case ModelKey.languageLevel:
languageLevel = value;
break;
case ModelKey.conversationTopic:
topic = value;
break;
case ModelKey.keywords:
keywords = value;
break;
case ModelKey.safetyModeration:
safetyModeration = value;
break;
case ModelKey.mode:
mode = value;
break;
case ModelKey.custom:
custom = value;
break;
case ModelKey.discussionTopic:
discussionTopic = value;
break;
case ModelKey.discussionKeywords:
discussionKeywords = value;
break;
case ModelKey.discussionTriggerScheduleEnabled:
discussionTriggerScheduleEnabled = value;
break;
case ModelKey.discussionTriggerScheduleHourInterval:
discussionTriggerScheduleHourInterval = value;
break;
case ModelKey.discussionTriggerReactionEnabled:
discussionTriggerReactionEnabled = value;
break;
case ModelKey.discussionTriggerReactionKey:
discussionTriggerReactionKey = value;
break;
default:
throw Exception('Invalid key for bot options - $key');
}

@ -1,8 +1,5 @@
import 'package:fluffychat/pangea/constants/language_keys.dart';
import 'package:fluffychat/pangea/models/speech_to_text_models.dart';
import 'package:fluffychat/pangea/utils/error_handler.dart';
import 'package:matrix/matrix.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
/// this class is contained within a [RepresentationEvent]
/// this event is the child of a [EventTypes.Message]
@ -56,14 +53,6 @@ class PangeaRepresentation {
});
factory PangeaRepresentation.fromJson(Map<String, dynamic> json) {
if (json[_langCodeKey] == LanguageKeys.unknownLanguage) {
ErrorHandler.logError(
e: Exception("Language code cannot be 'unk'"),
s: StackTrace.current,
data: {"rep_content": json},
level: SentryLevel.warning,
);
}
return PangeaRepresentation(
langCode: json[_langCodeKey],
text: json[_textKey],

@ -1,5 +1,6 @@
import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart';
import 'package:fluffychat/pangea/models/pangea_match_model.dart';
import 'package:fluffychat/pangea/utils/error_handler.dart';
class SpanCardModel {
// IGCTextData igcTextData;
@ -21,6 +22,18 @@ class SpanCardModel {
required this.choreographer,
});
PangeaMatch? get pangeaMatch =>
choreographer.igc.igcTextData?.matches[matchIndex];
PangeaMatch? get pangeaMatch {
if (choreographer.igc.igcTextData == null) return null;
if (matchIndex >= choreographer.igc.igcTextData!.matches.length) {
ErrorHandler.logError(
m: "matchIndex out of bounds in span card",
data: {
"matchIndex": matchIndex,
"matchesLength": choreographer.igc.igcTextData?.matches.length,
},
);
return null;
}
return choreographer.igc.igcTextData?.matches[matchIndex];
}
}

@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
class ConversationBotConversationZone extends StatelessWidget {
const ConversationBotConversationZone({
super.key,
});
@override
Widget build(BuildContext context) {
return const Column(
children: [
Text('Conversation Zone'),
],
);
}
}

@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
class ConversationBotCustomZone extends StatelessWidget {
const ConversationBotCustomZone({
super.key,
});
@override
Widget build(BuildContext context) {
return const Column(
children: [
Text('Custom Zone'),
],
);
}
}

@ -0,0 +1,71 @@
import 'package:fluffychat/pangea/models/bot_options_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
class ConversationBotDiscussionKeywordsInput extends StatelessWidget {
final BotOptionsModel initialBotOptions;
// call this to update propagate changes to parents
final void Function(BotOptionsModel) onChanged;
const ConversationBotDiscussionKeywordsInput({
super.key,
required this.initialBotOptions,
required this.onChanged,
});
@override
Widget build(BuildContext context) {
String discussionKeywords = initialBotOptions.discussionKeywords ?? "";
final TextEditingController textFieldController =
TextEditingController(text: discussionKeywords);
void setBotDiscussionKeywordsAction() async {
showDialog(
context: context,
useRootNavigator: false,
builder: (BuildContext context) => AlertDialog(
title: Text(
L10n.of(context)!
.conversationBotDiscussionZone_discussionKeywordsLabel,
),
content: TextField(
controller: textFieldController,
onChanged: (value) {
discussionKeywords = value;
},
),
actions: [
TextButton(
child: Text(L10n.of(context)!.cancel),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: Text(L10n.of(context)!.ok),
onPressed: () {
if (discussionKeywords == "") return;
if (discussionKeywords !=
initialBotOptions.discussionKeywords) {
initialBotOptions.discussionKeywords = discussionKeywords;
onChanged.call(initialBotOptions);
Navigator.of(context).pop();
}
},
),
],
),
);
}
return ListTile(
onTap: setBotDiscussionKeywordsAction,
title: Text(
initialBotOptions.discussionKeywords ??
L10n.of(context)!
.conversationBotDiscussionZone_discussionKeywordsPlaceholder,
),
);
}
}

@ -0,0 +1,70 @@
import 'package:fluffychat/pangea/models/bot_options_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
class ConversationBotDiscussionTopicInput extends StatelessWidget {
final BotOptionsModel initialBotOptions;
// call this to update propagate changes to parents
final void Function(BotOptionsModel) onChanged;
const ConversationBotDiscussionTopicInput({
super.key,
required this.initialBotOptions,
required this.onChanged,
});
@override
Widget build(BuildContext context) {
String discussionTopic = initialBotOptions.discussionTopic ?? "";
final TextEditingController textFieldController =
TextEditingController(text: discussionTopic);
void setBotDiscussionTopicAction() async {
showDialog(
context: context,
useRootNavigator: false,
builder: (BuildContext context) => AlertDialog(
title: Text(
L10n.of(context)!
.conversationBotDiscussionZone_discussionTopicLabel,
),
content: TextField(
controller: textFieldController,
onChanged: (value) {
discussionTopic = value;
},
),
actions: [
TextButton(
child: Text(L10n.of(context)!.cancel),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: Text(L10n.of(context)!.ok),
onPressed: () {
if (discussionTopic == "") return;
if (discussionTopic != initialBotOptions.discussionTopic) {
initialBotOptions.discussionTopic = discussionTopic;
onChanged.call(initialBotOptions);
Navigator.of(context).pop();
}
},
),
],
),
);
}
return ListTile(
onTap: setBotDiscussionTopicAction,
title: Text(
initialBotOptions.discussionTopic ??
L10n.of(context)!
.conversationBotDiscussionZone_discussionTopicPlaceholder,
),
);
}
}

@ -0,0 +1,225 @@
import 'package:fluffychat/pangea/models/bot_options_model.dart';
import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_discussion_keywords_input.dart';
import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_discussion_topic_input.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
class ConversationBotDiscussionZone extends StatelessWidget {
final BotOptionsModel initialBotOptions;
// call this to update propagate changes to parents
final void Function(BotOptionsModel) onChanged;
const ConversationBotDiscussionZone({
super.key,
required this.initialBotOptions,
required this.onChanged,
});
@override
Widget build(BuildContext context) {
final String discussionTopic = initialBotOptions.discussionTopic ?? "";
final String discussionKeywords =
initialBotOptions.discussionKeywords ?? "";
// int discussionTriggerScheduleHourInterval =
// initialBotOptions.discussionTriggerScheduleHourInterval ?? 24;
// String discussionTriggerReactionKey =
// initialBotOptions.discussionTriggerReactionKey ?? "";
// List<String> reactionKeyOptions = [""];
return Column(
children: [
const SizedBox(height: 12),
Text(
L10n.of(context)!.conversationBotDiscussionZone_title,
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
fontWeight: FontWeight.bold,
),
),
const Divider(
color: Colors.grey,
thickness: 1,
),
const SizedBox(height: 12),
Align(
alignment: Alignment.centerLeft,
child: Padding(
padding: const EdgeInsets.fromLTRB(12, 0, 0, 0),
child: Text(
L10n.of(context)!
.conversationBotDiscussionZone_discussionTopicLabel,
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
fontWeight: FontWeight.bold,
),
),
),
),
Padding(
padding: const EdgeInsets.all(8),
child: ConversationBotDiscussionTopicInput(
initialBotOptions: initialBotOptions,
onChanged: onChanged,
),
),
const SizedBox(height: 12),
Align(
alignment: Alignment.centerLeft,
child: Padding(
padding: const EdgeInsets.fromLTRB(12, 0, 0, 0),
child: Text(
L10n.of(context)!
.conversationBotDiscussionZone_discussionKeywordsLabel,
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
fontWeight: FontWeight.bold,
),
),
),
),
Padding(
padding: const EdgeInsets.all(8),
child: ConversationBotDiscussionKeywordsInput(
initialBotOptions: initialBotOptions,
onChanged: onChanged,
),
),
const SizedBox(height: 12),
// CheckboxListTile(
// title: Text(
// L10n.of(context)!
// .conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel,
// ),
// value: initialBotOptions.discussionTriggerScheduleEnabled ?? false,
// onChanged: (value) {
// initialBotOptions.discussionTriggerScheduleEnabled = value ?? false;
// onChanged?.call(initialBotOptions);
// },
// ),
// if (initialBotOptions.discussionTriggerScheduleEnabled == true)
// Padding(
// padding: const EdgeInsets.all(8),
// child: TextField(
// keyboardType: TextInputType.number,
// controller: TextEditingController(
// text: discussionTriggerScheduleHourInterval.toString(),
// ),
// onChanged: (value) {
// discussionTriggerScheduleHourInterval =
// int.tryParse(value) ?? 0;
// },
// decoration: InputDecoration(
// labelText: L10n.of(context)!
// .conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel,
// floatingLabelBehavior: FloatingLabelBehavior.auto,
// suffixIcon: IconButton(
// icon: const Icon(Icons.check),
// onPressed: () {
// if (discussionTriggerScheduleHourInterval !=
// initialBotOptions
// .discussionTriggerScheduleHourInterval) {
// initialBotOptions.discussionTriggerScheduleHourInterval =
// discussionTriggerScheduleHourInterval;
// onChanged?.call(
// initialBotOptions,
// );
// }
// },
// ),
// ),
// ),
// ),
// const SizedBox(height: 12),
CheckboxListTile(
title: Text(
L10n.of(context)!
.conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel,
),
value: initialBotOptions.discussionTriggerReactionEnabled ?? false,
onChanged: (value) {
initialBotOptions.discussionTriggerReactionEnabled = value ?? false;
initialBotOptions.discussionTriggerReactionKey =
""; // hard code this for now
onChanged.call(initialBotOptions);
},
),
// if (initialBotOptions.discussionTriggerReactionEnabled == true)
// Padding(
// padding: const EdgeInsets.all(8),
// child: Column(
// children: [
// Text(
// L10n.of(context)!
// .conversationBotDiscussionZone_discussionTriggerReactionKeyLabel,
// style: TextStyle(
// color: Theme.of(context).colorScheme.secondary,
// fontWeight: FontWeight.bold,
// ),
// textAlign: TextAlign.left,
// ),
// Container(
// decoration: BoxDecoration(
// border: Border.all(
// color: Theme.of(context).colorScheme.secondary,
// width: 0.5,
// ),
// borderRadius: const BorderRadius.all(Radius.circular(10)),
// ),
// child: DropdownButton(
// // Initial Value
// hint: Padding(
// padding: const EdgeInsets.only(left: 15),
// child: Text(
// reactionKeyOptions[0],
// style: const TextStyle().copyWith(
// color: Theme.of(context).textTheme.bodyLarge!.color,
// fontSize: 14,
// ),
// overflow: TextOverflow.clip,
// textAlign: TextAlign.center,
// ),
// ),
// isExpanded: true,
// underline: Container(),
// // Down Arrow Icon
// icon: const Icon(Icons.keyboard_arrow_down),
// // Array list of items
// items: [
// for (final entry in reactionKeyOptions)
// DropdownMenuItem(
// value: entry,
// child: Padding(
// padding: const EdgeInsets.only(left: 15),
// child: Text(
// entry,
// style: const TextStyle().copyWith(
// color: Theme.of(context)
// .textTheme
// .bodyLarge!
// .color,
// fontSize: 14,
// ),
// overflow: TextOverflow.clip,
// textAlign: TextAlign.center,
// ),
// ),
// ),
// ],
// onChanged: (String? value) {
// if (value !=
// initialBotOptions.discussionTriggerReactionKey) {
// initialBotOptions.discussionTriggerReactionKey = value;
// onChanged?.call(
// initialBotOptions,
// );
// }
// },
// ),
// ),
// ],
// ),
// ),
const SizedBox(height: 12),
],
);
}
}

@ -0,0 +1,41 @@
import 'package:fluffychat/pangea/models/bot_options_model.dart';
import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_conversation_zone.dart';
import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_custom_zone.dart';
import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart';
import 'package:flutter/material.dart';
import 'conversation_bot_discussion_zone.dart';
class ConversationBotModeDynamicZone extends StatelessWidget {
final BotOptionsModel initialBotOptions;
final void Function(BotOptionsModel) onChanged;
const ConversationBotModeDynamicZone({
super.key,
required this.initialBotOptions,
required this.onChanged,
});
@override
Widget build(BuildContext context) {
final zoneMap = {
'discussion': ConversationBotDiscussionZone(
initialBotOptions: initialBotOptions,
onChanged: onChanged,
),
"custom": const ConversationBotCustomZone(),
"conversation": const ConversationBotConversationZone(),
"text_adventure": const ConversationBotTextAdventureZone(),
};
return Container(
decoration: BoxDecoration(
border: Border.all(
color: Theme.of(context).colorScheme.secondary,
width: 0.5,
),
borderRadius: const BorderRadius.all(Radius.circular(10)),
),
child: zoneMap[initialBotOptions.mode],
);
}
}

@ -0,0 +1,78 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
class ConversationBotModeSelect extends StatelessWidget {
final String? initialMode;
final void Function(String?)? onChanged;
const ConversationBotModeSelect({
super.key,
this.initialMode,
this.onChanged,
});
@override
Widget build(BuildContext context) {
final Map<String, String> options = {
"discussion":
L10n.of(context)!.conversationBotModeSelectOption_discussion,
// "custom": L10n.of(context)!.conversationBotModeSelectOption_custom,
// "conversation":
// L10n.of(context)!.conversationBotModeSelectOption_conversation,
// "text_adventure":
// L10n.of(context)!.conversationBotModeSelectOption_textAdventure,
};
return Padding(
padding: const EdgeInsets.all(12.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Theme.of(context).colorScheme.secondary,
width: 0.5,
),
borderRadius: const BorderRadius.all(Radius.circular(10)),
),
child: DropdownButton(
// Initial Value
hint: Padding(
padding: const EdgeInsets.only(left: 15),
child: Text(
options[initialMode ?? "discussion"]!,
style: const TextStyle().copyWith(
color: Theme.of(context).textTheme.bodyLarge!.color,
fontSize: 14,
),
overflow: TextOverflow.clip,
textAlign: TextAlign.center,
),
),
isExpanded: true,
underline: Container(),
// Down Arrow Icon
icon: const Icon(Icons.keyboard_arrow_down),
// Array list of items
items: [
for (final entry in options.entries)
DropdownMenuItem(
value: entry.key,
child: Padding(
padding: const EdgeInsets.only(left: 15),
child: Text(
entry.value,
style: const TextStyle().copyWith(
color: Theme.of(context).textTheme.bodyLarge!.color,
fontSize: 14,
),
overflow: TextOverflow.clip,
textAlign: TextAlign.center,
),
),
),
],
onChanged: onChanged,
),
),
);
}
}

@ -1,10 +1,10 @@
import 'dart:developer';
import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/models/bot_options_model.dart';
import 'package:fluffychat/pangea/utils/bot_name.dart';
import 'package:fluffychat/pangea/widgets/common/bot_face_svg.dart';
import 'package:fluffychat/pangea/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart';
import 'package:fluffychat/pangea/widgets/space/language_level_dropdown.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
@ -156,49 +156,49 @@ class ConversationBotSettingsState extends State<ConversationBotSettings> {
),
),
if (addBot) ...[
Padding(
padding: const EdgeInsets.only(left: 16),
child: ListTile(
onTap: () async {
final topic = await showTextInputDialog(
context: context,
textFields: [
DialogTextField(
initialText: botOptions.topic.isEmpty
? ""
: botOptions.topic,
hintText:
L10n.of(context)!.enterAConversationTopic,
),
],
title: L10n.of(context)!.conversationTopic,
);
if (topic == null) return;
updateBotOption(() {
botOptions.topic = topic.single;
});
},
leading: CircleAvatar(
backgroundColor:
Theme.of(context).scaffoldBackgroundColor,
foregroundColor:
Theme.of(context).textTheme.bodyLarge!.color,
child: const Icon(Icons.topic_outlined),
),
subtitle: Text(
botOptions.topic.isEmpty
? L10n.of(context)!.enterAConversationTopic
: botOptions.topic,
),
title: Text(
L10n.of(context)!.conversationTopic,
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
fontWeight: FontWeight.bold,
),
),
),
),
// Padding(
// padding: const EdgeInsets.only(left: 16),
// child: ListTile(
// onTap: () async {
// final topic = await showTextInputDialog(
// context: context,
// textFields: [
// DialogTextField(
// initialText: botOptions.topic.isEmpty
// ? ""
// : botOptions.topic,
// hintText:
// L10n.of(context)!.enterAConversationTopic,
// ),
// ],
// title: L10n.of(context)!.conversationTopic,
// );
// if (topic == null) return;
// updateBotOption(() {
// botOptions.topic = topic.single;
// });
// },
// leading: CircleAvatar(
// backgroundColor:
// Theme.of(context).scaffoldBackgroundColor,
// foregroundColor:
// Theme.of(context).textTheme.bodyLarge!.color,
// child: const Icon(Icons.topic_outlined),
// ),
// subtitle: Text(
// botOptions.topic.isEmpty
// ? L10n.of(context)!.enterAConversationTopic
// : botOptions.topic,
// ),
// title: Text(
// L10n.of(context)!.conversationTopic,
// style: TextStyle(
// color: Theme.of(context).colorScheme.secondary,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// ),
// Padding(
// padding: const EdgeInsets.only(left: 16),
// child: SwitchListTile.adaptive(
@ -244,6 +244,41 @@ class ConversationBotSettingsState extends State<ConversationBotSettings> {
}),
),
),
// Padding(
// padding: const EdgeInsets.fromLTRB(32, 16, 0, 0),
// child: Text(
// L10n.of(context)!.conversationBotModeSelectDescription,
// style: TextStyle(
// color: Theme.of(context).colorScheme.secondary,
// fontWeight: FontWeight.bold,
// fontSize: 16,
// ),
// ),
// ),
// Padding(
// padding: const EdgeInsets.only(left: 16),
// child: ConversationBotModeSelect(
// initialMode: botOptions.mode,
// onChanged: (String? mode) => updateBotOption(
// () {
// botOptions.mode = mode ?? "discussion";
// },
// ),
// ),
// ),
Padding(
padding: const EdgeInsets.fromLTRB(28, 0, 12, 0),
child: ConversationBotModeDynamicZone(
initialBotOptions: botOptions,
onChanged: (BotOptionsModel? newOptions) {
updateBotOption(() {
if (newOptions != null) {
botOptions = newOptions;
}
});
},
),
),
const SizedBox(height: 16),
],
],

@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
class ConversationBotTextAdventureZone extends StatelessWidget {
const ConversationBotTextAdventureZone({
super.key,
});
@override
Widget build(BuildContext context) {
return const Column(
children: [
Text('Text Adventure Zone'),
],
);
}
}

@ -58,10 +58,14 @@ class SpanCardState extends State<SpanCard> {
}
//get selected choice
SpanChoice? get selectedChoice => selectedChoiceIndex != null &&
widget.scm.pangeaMatch?.match.choices != null
? widget.scm.pangeaMatch!.match.choices![selectedChoiceIndex!]
: null;
SpanChoice? get selectedChoice {
if (selectedChoiceIndex == null ||
widget.scm.pangeaMatch?.match.choices == null ||
widget.scm.pangeaMatch!.match.choices!.length >= selectedChoiceIndex!) {
return null;
}
return widget.scm.pangeaMatch?.match.choices?[selectedChoiceIndex!];
}
Future<void> getSpanDetails() async {
try {

@ -1,20 +1,16 @@
import 'dart:io';
import 'package:fluffychat/pangea/utils/error_handler.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/flutter_hive_collections_database.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:universal_html/html.dart' as html;
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/flutter_hive_collections_database.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'cipher.dart';
import 'sqlcipher_stub.dart'
if (dart.library.io) 'package:sqlcipher_flutter_libs/sqlcipher_flutter_libs.dart';
@ -24,25 +20,49 @@ Future<DatabaseApi> flutterMatrixSdkDatabaseBuilder(Client client) async {
database = await _constructDatabase(client);
await database.open();
return database;
} catch (e) {
// #Pangea
// } catch (e) {
} catch (e, s) {
ErrorHandler.logError(
e: e,
s: s,
m: "Failed to open matrix sdk database. Openning fallback database.",
);
// Pangea#
// Try to delete database so that it can created again on next init:
database?.delete().catchError(
(e, s) => Logs().w(
'Unable to delete database, after failed construction',
e,
s,
),
// #Pangea
// (e, s) => Logs().w(
// 'Unable to delete database, after failed construction',
// e,
// s,
// ),
(e, s) {
Logs().w(
'Unable to delete database, after failed construction',
e,
s,
);
ErrorHandler.logError(
e: e,
s: s,
m: "Failed to delete matrix database after failed construction.",
);
}
// Pangea#
);
// Send error notification:
final l10n = lookupL10n(PlatformDispatcher.instance.locale);
ClientManager.sendInitNotification(
l10n.initAppError,
l10n.databaseBuildErrorBody(
AppConfig.newIssueUrl.toString(),
e.toString(),
),
);
// #Pangea
// final l10n = lookupL10n(PlatformDispatcher.instance.locale);
// ClientManager.sendInitNotification(
// l10n.initAppError,
// l10n.databaseBuildErrorBody(
// AppConfig.newIssueUrl.toString(),
// e.toString(),
// ),
// );
// Pangea#
return FlutterHiveCollectionsDatabase.databaseBuilder(client);
}

@ -821,6 +821,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -2244,6 +2259,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -3129,6 +3159,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -4014,6 +4059,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -4899,6 +4959,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -5784,6 +5859,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -6616,6 +6706,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -7501,6 +7606,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -8386,17 +8506,27 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
"wordsPerMinute"
],
"es": [
"studentAnalyticsNotAvailable",
"roomDataMissing"
],
"et": [
"accountInformation",
"addGroupDescription",
@ -9219,6 +9349,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -10047,6 +10192,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -10932,6 +11092,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -11817,6 +11992,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -12702,6 +12892,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -13587,6 +13792,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -14415,6 +14635,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -15300,6 +15535,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -16185,6 +16435,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -17057,6 +17322,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -17942,6 +18222,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -19351,6 +19646,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -20236,6 +20546,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -21121,6 +21446,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -21991,6 +22331,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -22876,6 +23231,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -23761,6 +24131,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -24646,6 +25031,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -25531,6 +25931,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -26416,6 +26831,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -27301,6 +27731,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -28186,6 +28631,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -29071,6 +29531,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -29925,6 +30400,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -30810,6 +31300,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -31695,6 +32200,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -32523,6 +33043,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -33408,6 +33943,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -34293,6 +34843,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -35178,6 +35743,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -36028,6 +36608,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -36913,6 +37508,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -37798,6 +38408,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -38668,6 +39293,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -39496,6 +40136,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -40381,6 +41036,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -41209,6 +41879,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",
@ -42094,6 +42779,21 @@
"accuracy",
"points",
"noPaymentInfo",
"conversationBotModeSelectDescription",
"conversationBotModeSelectOption_discussion",
"conversationBotModeSelectOption_custom",
"conversationBotModeSelectOption_conversation",
"conversationBotModeSelectOption_textAdventure",
"conversationBotDiscussionZone_title",
"conversationBotDiscussionZone_discussionTopicLabel",
"conversationBotDiscussionZone_discussionTopicPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsLabel",
"conversationBotDiscussionZone_discussionKeywordsPlaceholder",
"conversationBotDiscussionZone_discussionKeywordsHintText",
"conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel",
"conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel",
"conversationBotDiscussionZone_discussionTriggerReactionKeyLabel",
"studentAnalyticsNotAvailable",
"roomDataMissing",
"updatePhoneOS",

Loading…
Cancel
Save