Guest User

Untitled

a guest
Apr 16th, 2025
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 KB | None | 0 0
  1. let handleMemberJoined = async (MemberId) => {
  2. console.log('A new member has joined the room:', MemberId)
  3. addMemberToDom(MemberId)
  4.  
  5. let members = await channel.getMembers()
  6. updateMemberTotal(members)
  7.  
  8. let {name} = await rtmClient.getUserAttributesByKeys(MemberId, ['name'])
  9. addBotMessageToDom(`Witaj na zajęciach ${name}! 👋`)
  10. }
  11.  
  12. let addMemberToDom = async (MemberId) => {
  13. let {name} = await rtmClient.getUserAttributesByKeys(MemberId, ['name'])
  14.  
  15. let membersWrapper = document.getElementById('member__list')
  16. let memberItem = `<div class="member__wrapper" id="member__${MemberId}__wrapper">
  17. <span class="green__icon"></span>
  18. <p class="member_name">${name}</p>
  19. </div>`
  20.  
  21. membersWrapper.insertAdjacentHTML('beforeend', memberItem)
  22. }
  23.  
  24. let updateMemberTotal = async (members) => {
  25. let total = document.getElementById('members__count')
  26. total.innerText = members.length
  27. }
  28.  
  29. let handleMemberLeft = async (MemberId) => {
  30. removeMemberFromDom(MemberId)
  31.  
  32. let members = await channel.getMembers()
  33. updateMemberTotal(members)
  34. }
  35.  
  36. let removeMemberFromDom = async (MemberId) => {
  37. let memberWrapper = document.getElementById(`member__${MemberId}__wrapper`)
  38. let name = memberWrapper.getElementsByClassName('member_name')[0].textContent
  39. addBotMessageToDom(`${name} opuścił/a zajęcia.`)
  40.  
  41. memberWrapper.remove()
  42. }
  43.  
  44. let getMembers = async () => {
  45. let members = await channel.getMembers()
  46. updateMemberTotal(members)
  47. for (let i = 0; members.length > i; i++){
  48. addMemberToDom(members[i])
  49. }
  50. }
  51.  
  52. let handleChannelMessage = async (messageData, MemberId) => {
  53. console.log('A new message was received')
  54. let data = JSON.parse(messageData.text)
  55.  
  56. if(data.type === 'chat'){
  57. addMessageToDom(data.displayName, data.message)
  58. }
  59. }
  60.  
  61. let sendMessage = async (e) => {
  62. e.preventDefault()
  63.  
  64. let message = e.target.message.value
  65. channel.sendMessage({text:JSON.stringify({'type':'chat', 'message':message, 'displayName':displayName})})
  66. addMessageToDom(displayName, message)
  67. e.target.reset()
  68. }
  69.  
  70. let addMessageToDom = (name, message) => {
  71. let messagesWrapper = document.getElementById('messages')
  72.  
  73. function convertLinksToAnchors(text) {
  74. const urlPattern = /(\bhttps?:\/\/[^\s<]+[^\s]*|www\.[^\s<]+[^\s]*)/gi;
  75. return text.replace(urlPattern, function(url) {
  76. var fullUrl = url;
  77. if (!url.startsWith('http://') && !url.startsWith('https://')) {
  78. fullUrl = 'http://' + url;
  79. }
  80. return `<a href="${fullUrl}" target="_blank">${url}</a>`;
  81. });
  82. }
  83.  
  84. let messageWithLinks = convertLinksToAnchors(message);
  85.  
  86. let newMessage = `<div class="message__wrapper">
  87. <div class="message__body">
  88. <strong class="message__author">${name}</strong>
  89. <p class="message__text">${messageWithLinks}</p>
  90. </div>
  91. </div>`
  92.  
  93. messagesWrapper.insertAdjacentHTML('beforeend', newMessage)
  94.  
  95. let lastMessage = document.querySelector('#messages .message__wrapper:last-child')
  96. if(lastMessage){
  97. lastMessage.scrollIntoView()
  98. }
  99. }
  100.  
  101. let addBotMessageToDom = (botMessage) => {
  102. let messagesWrapper = document.getElementById('messages')
  103.  
  104. let newMessage = `<div class="message__wrapper">
  105. <div class="message__body__bot">
  106. <strong class="message__author__bot">🐻‍❄️ Resq Bot</strong>
  107. <p class="message__text__bot">${botMessage}</p>
  108. </div>
  109. </div>`
  110.  
  111. messagesWrapper.insertAdjacentHTML('beforeend', newMessage)
  112.  
  113. let lastMessage = document.querySelector('#messages .message__wrapper:last-child')
  114. if(lastMessage){
  115. lastMessage.scrollIntoView()
  116. }
  117. }
  118.  
  119. let leaveChannel = async () => {
  120. await channel.leave()
  121. await rtmClient.logout()
  122. }
  123.  
  124. window.addEventListener('beforeunload', leaveChannel)
  125. let messageForm = document.getElementById('message__form')
  126. messageForm.addEventListener('submit', sendMessage)
Add Comment
Please, Sign In to add comment