Skip to content

Commit

Permalink
fix: simplify split_sms function (it splits now simply by \n)
Browse files Browse the repository at this point in the history
  • Loading branch information
charnould committed Oct 28, 2024
1 parent 5f77e8d commit 3390ccc
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 51 deletions.
20 changes: 9 additions & 11 deletions tests/utils/split-sms.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,19 @@ test('should split outgoing sms', async () => {
const i1 =
"Si votre voisin fait trop de bruit, voici les étapes à suivre :\n\nEssayer de résoudre le problème à l'amiable : Parlez directement avec votre voisin pour lui faire part de votre gêne. Vous pouvez demander à une tierce personne de vous accompagner si nécessaire.\n\nVérifiez le règlement intérieur : Consultez le règlement de votre résidence pour voir s'il y a des règles concernant le bruit.\n\nSi le problème persiste :\n Envoyez une lettre recommandée à votre voisin pour formaliser votre plainte.\n Rassemblez des preuves (témoignages, pétitions, constats) au cas où vous auriez besoin d'un recours.\n Vous pouvez également contacter la police ou la gendarmerie si le bruit est excessif, surtout la nuit.\n\nDernier recours : Si aucune solution n'est trouvée, vous pouvez saisir un tribunal pour obtenir réparation.\n\nAttention : Assurez-vous que vos plaintes sont fondées pour éviter des complications."
const o1 = [
"Si votre voisin fait trop de bruit, voici les étapes à suivre :Essayer de résoudre le problème à l'amiable : Parlez directement avec votre voisin pour lui faire part de votre gêne. Vous pouvez demander à une tierce personne de vous accompagner si nécessaire.Vérifiez le règlement intérieur : Consultez le règlement de votre résidence pour voir s'il y a des règles concernant le bruit. Si le problème persiste :Envoyez une lettre recommandée à votre voisin pour formaliser votre plainte. Rassemblez des preuves (témoignages, pétitions, constats) au cas où vous auriez besoin d'un recours. Vous pouvez également contacter la police ou la gendarmerie si le bruit est excessif, surtout la nuit. ",
'Attention : Assurez-vous que vos plaintes sont fondées pour éviter des complications. '
'Si votre voisin fait trop de bruit, voici les étapes à suivre :',
"Essayer de résoudre le problème à l'amiable : Parlez directement avec votre voisin pour lui faire part de votre gêne. Vous pouvez demander à une tierce personne de vous accompagner si nécessaire.",
"Vérifiez le règlement intérieur : Consultez le règlement de votre résidence pour voir s'il y a des règles concernant le bruit.",
'Si le problème persiste :',
'Envoyez une lettre recommandée à votre voisin pour formaliser votre plainte.',
"Rassemblez des preuves (témoignages, pétitions, constats) au cas où vous auriez besoin d'un recours.",
'Vous pouvez également contacter la police ou la gendarmerie si le bruit est excessif, surtout la nuit.',
"Dernier recours : Si aucune solution n'est trouvée, vous pouvez saisir un tribunal pour obtenir réparation.",
'Attention : Assurez-vous que vos plaintes sont fondées pour éviter des complications.'
]
expect(split_sms(i1)).toEqual(o1)

const i2 = 'Ce SMS est super court.'
const o2 = ['Ce SMS est super court.']
expect(split_sms(i2)).toEqual(o2)

const i3 =
"Selon le testament d'Alfred Nobel, le prix doit récompenser « la découverte ou l'amélioration la plus importante en chimie ». Nobel voulait qu'il soit attribué par l'Académie royale des sciences de Suède, comme pour le prix en physique. L'Académie délègue l'étude des candidatures au Comité Nobel, qui dépend de la fondation Nobel, déterminant la spécificité de chacune des branches à récompenser. Les membres du comité sont au nombre de cinq. Ils sont désignés par cooptation parmi les membres de l'Académie royale pour une période de trois ans. Ceux-ci s'appuient sur différentes figures d'autorité pour établir leurs nominations : chimistes reconnus, cercles d'éminents professeurs en université, associations de chercheurs, anciens lauréats du prix, dirigeants de grands centres nationaux ou internationaux de recherches scientifiques… Des courriers du comité sont envoyés à l'automne afin d'être retournés pour le choix du lauréat de l'année suivante. Il est interdit à chacune des personnes sollicitées de voter pour elle-même. Plusieurs centaines de propositions annuelles, obligatoirement argumentées et détaillées, sont ainsi soumises au comité qui en étudie la fiabilité, la légitimité et la crédibilité. Le comité ne conserve qu'une cinquantaine de candidatures soumises dès le printemps aux autres académiciens qui doivent souscrire à quelques recommandations. La liste finale, statuée par le comité Nobel, comprend cinq noms ou groupes de noms associés à une recherche précise. L'élection du ou des lauréats se fait en octobre au scrutin majoritaire. Tous les membres de l'Académie royale participent au vote. L'identité du ou des récipiendaires est révélée lors d'une conférence de presse officielle. Les nominations et le cadre des délibérations sont normalement tenus au secret pour 50 années avant que les archives de la fondation Nobel soient ouvertes. Les jurés sont obligés de respecter l'instruction du testament de Nobel : « a fait ses preuves avec le temps » pour attribuer le prix. Entre la découverte du scientifique et sa désignation en tant que récipiendaire doit normalement s'écouler une période minimum de vingt ans. Cet ordre est sujet à polémique dans la mesure où les personnalités dans le domaine ne survivent pas tous à l'intervalle donné. D'immenses savants, dont l'œuvre a pourtant complètement modifié l'approche de la discipline, n'ont pas été récompensés, le prix ne pouvant être attribué de manière posthume."
const o3 = [
"Selon le testament d'Alfred Nobel, le prix doit récompenser « la découverte ou l'amélioration la plus importante en chimie »Nobel voulait qu'il soit attribué par l'Académie royale des sciences de Suède, comme pour le prix en physiqueL'Académie délègue l'étude des candidatures au Comité Nobel, qui dépend de la fondation Nobel, déterminant la spécificité de chacune des branches à récompenserLes membres du comité sont au nombre de cinqIls sont désignés par cooptation parmi les membres de l'Académie royale pour une période de trois ans",
"Il est interdit à chacune des personnes sollicitées de voter pour elle-mêmePlusieurs centaines de propositions annuelles, obligatoirement argumentées et détaillées, sont ainsi soumises au comité qui en étudie la fiabilité, la légitimité et la crédibilitéLe comité ne conserve qu'une cinquantaine de candidatures soumises dès le printemps aux autres académiciens qui doivent souscrire à quelques recommandationsLa liste finale, statuée par le comité Nobel, comprend cinq noms ou groupes de noms associés à une recherche préciseL'élection du ou des lauréats se fait en octobre au scrutin majoritaireTous les membres de l'Académie royale participent au voteL'identité du ou des récipiendaires est révélée lors d'une conférence de presse officielle",
"D'immenses savants, dont l'œuvre a pourtant complètement modifié l'approche de la discipline, n'ont pas été récompensés, le prix ne pouvant être attribué de manière posthume"
]
expect(split_sms(i3)).toEqual(o3)
})
49 changes: 9 additions & 40 deletions utils/split-sms.ts
Original file line number Diff line number Diff line change
@@ -1,40 +1,9 @@
import { count } from 'sms-length'

export const split_sms = (sms: string) => {
// CM.com allows max 10 "parts" per SMS,
// so if it's less, we can send it that way.
const { messages } = count(sms)
if (messages <= 10) return [sms]

// Otherwise, we need to split it.
let split_sms = sms.includes('\n') ? sms.split('\n') : sms.split('.')
split_sms = split_sms.map((part) => part.trim().replace('.', '. ')).filter((part) => part !== '')

const sms_to_send: string[] = []
let part = ''
let index = 0
let part_counter = 0

for (const el of split_sms) {
const { messages } = count(el)
part_counter += messages

// If it's the last part of split sms,
// then push it to final SMS.
if (index === split_sms.length - 1) sms_to_send.push(el)

// If part number is lower than 10,
// continue to add part to former part...
if (part_counter < 10) {
part += el
index++
} else {
sms_to_send.push(part)
part = ''
part_counter = 0
index++
}
}

return sms_to_send
}
// Caution:
// CM supports a maximum of 10 `parts` per SMS (1 SMS = 1 grey/green bubble in the iOS Messages app).
// Currently, this function does not split or group by `parts`, nor does it verify SMS length`.
// While this may NOT cause issues, be mindful if users say they receive "incomplete" response.
export const split_sms = (sms: string) =>
sms
.split('\n')
.map((part) => part.replace(/\n\n$/g, '').trim())
.filter((part) => part !== '')

0 comments on commit 3390ccc

Please sign in to comment.