diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 6677bc3d36..fe2a3da03a 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -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.", diff --git a/assets/l10n/intl_es.arb b/assets/l10n/intl_es.arb index 59f5719b05..d463699be6 100644 --- a/assets/l10n/intl_es.arb +++ b/assets/l10n/intl_es.arb @@ -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." } \ No newline at end of file diff --git a/lib/pangea/choreographer/controllers/igc_controller.dart b/lib/pangea/choreographer/controllers/igc_controller.dart index f5e15a1e33..73694e257d 100644 --- a/lib/pangea/choreographer/controllers/igc_controller.dart +++ b/lib/pangea/choreographer/controllers/igc_controller.dart @@ -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(); } diff --git a/lib/pangea/constants/model_keys.dart b/lib/pangea/constants/model_keys.dart index dd9764fb91..ce427f3d3e 100644 --- a/lib/pangea/constants/model_keys.dart +++ b/lib/pangea/constants/model_keys.dart @@ -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"; } diff --git a/lib/pangea/extensions/client_extension/classes_and_exchanges.dart b/lib/pangea/extensions/client_extension/classes_and_exchanges.dart index ec3dd2237e..5f28563db8 100644 --- a/lib/pangea/extensions/client_extension/classes_and_exchanges.dart +++ b/lib/pangea/extensions/client_extension/classes_and_exchanges.dart @@ -12,7 +12,8 @@ extension PangeaClient2 on Client { .toList(); Future> 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(); } diff --git a/lib/pangea/models/bot_options_model.dart b/lib/pangea/models/bot_options_model.dart index 0cba5fd789..0b437159e9 100644 --- a/lib/pangea/models/bot_options_model.dart +++ b/lib/pangea/models/bot_options_model.dart @@ -12,20 +12,45 @@ class BotOptionsModel { String topic; List 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(), 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'); } diff --git a/lib/pangea/models/representation_content_model.dart b/lib/pangea/models/representation_content_model.dart index c4ff52fe75..f49a465b4c 100644 --- a/lib/pangea/models/representation_content_model.dart +++ b/lib/pangea/models/representation_content_model.dart @@ -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 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], diff --git a/lib/pangea/models/span_card_model.dart b/lib/pangea/models/span_card_model.dart index 8a252e67b1..f74a14332b 100644 --- a/lib/pangea/models/span_card_model.dart +++ b/lib/pangea/models/span_card_model.dart @@ -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]; + } } diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_conversation_zone.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_conversation_zone.dart new file mode 100644 index 0000000000..975cc1d0d8 --- /dev/null +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_conversation_zone.dart @@ -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'), + ], + ); + } +} diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_custom_zone.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_custom_zone.dart new file mode 100644 index 0000000000..5fe8880ea9 --- /dev/null +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_custom_zone.dart @@ -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'), + ], + ); + } +} diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_keywords_input.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_keywords_input.dart new file mode 100644 index 0000000000..9024e41bb6 --- /dev/null +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_keywords_input.dart @@ -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, + ), + ); + } +} diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_topic_input.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_topic_input.dart new file mode 100644 index 0000000000..72caa38394 --- /dev/null +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_topic_input.dart @@ -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, + ), + ); + } +} diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_zone.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_zone.dart new file mode 100644 index 0000000000..57c25e133f --- /dev/null +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_discussion_zone.dart @@ -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 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), + ], + ); + } +} diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart new file mode 100644 index 0000000000..b0c78888fc --- /dev/null +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_mode_dynamic_zone.dart @@ -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], + ); + } +} diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_mode_select.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_mode_select.dart new file mode 100644 index 0000000000..9662dec55a --- /dev/null +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_mode_select.dart @@ -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 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, + ), + ), + ); + } +} diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart index 0227c243ac..d10fd69805 100644 --- a/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_settings.dart @@ -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 { ), ), 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 { }), ), ), + // 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), ], ], diff --git a/lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart b/lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart new file mode 100644 index 0000000000..2f65348cf1 --- /dev/null +++ b/lib/pangea/widgets/conversation_bot/conversation_bot_text_adventure_zone.dart @@ -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'), + ], + ); + } +} diff --git a/lib/pangea/widgets/igc/span_card.dart b/lib/pangea/widgets/igc/span_card.dart index 7185d726ce..9ef2f41227 100644 --- a/lib/pangea/widgets/igc/span_card.dart +++ b/lib/pangea/widgets/igc/span_card.dart @@ -58,10 +58,14 @@ class SpanCardState extends State { } //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 getSpanDetails() async { try { diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart index 301d0c6ee9..e1a8b99d51 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart @@ -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 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); } diff --git a/needed-translations.txt b/needed-translations.txt index 120bd42556..bb967d011a 100644 --- a/needed-translations.txt +++ b/needed-translations.txt @@ -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",