praise icon indicating copy to clipboard operation
praise copied to clipboard

As a user I want to praise anyone on Twitter

Open kristoferlund opened this issue 1 year ago • 9 comments

image.png

Main success scenario

  1. Write Tweet in the form @givethpraise @user for doing something great
  2. TwitterBot picks up tweet from listening to all tweets mentioning @givethpraise
  3. TwitterBot verifies that user has activated their account and are allowed to praise
  4. TwitterBot verifies that tweet has the correct format
  5. TwitterBot creates receiver UserAccounts if needed by calling the API
  6. TwitterBot looks up community host name in local cache and fetches list from API if not found
  7. TwitterBot posts praise to API
    1. Header user-agentto let the API know which bot request came from
    2. Header host to let the API know which community the request came from
    3. Header x-api-key gives the bot access to call the API
      1. This key is configured in ENV and is not community specific
    4. sourceName and sourceId follows the format specified below
  8. API looks up host and verifies that community is in state active
  9. API makes changes to DB
  10. TwitterBot shares praise message to praise bot feed (@givethpraise in this example)
  11. TwitterBot tweets a reply to the praise tweet confirming it has been registered
  12. Twitter notifies user that the praise message has a reply

ℹ️ Look at praise handler in Discord bot code and make sure to include all steps done there

Extensions

  1. User has not activated their account
  2. Reply with message instructing user to activate account before praising.
  3. Praise has not correct format
    1. Reply with error message, instructions, link to docs
  4. Community not set up correctly
    1. Reply with error message, instructions, link to docs

Details

TwitterBot verifies that user has activated their account and are allowed to praise

  • "Activated their account" means a User object is connected to their UserAccount object.
  • As Praise don't have a permissions system to determine who is allowed to praise we have to rely on Discord to determine if user is allowed to Praise.
    • If community has specified Praise giver discord roles, then we need to fetch user information from Discord and check that user belongs to that role.
    • See Discord bot code for example

For reference: Praise sourceId and sourceName for Discord

sourceId: platform + ":" + serverId + ":" + channelId

Example:
- platform: DISCORD
- serverId: 810180621930070088
- channelId: 810180622336262195
- sourceId: "DISCORD:810180621930070088:810180622336262195"

sourceName: platform + ":" + urlencode(serverName) + ":" + urlencode(channelName)

Example:
- platform: DISCORD
- serverName: Token Engineering Commons
- channelName: 🙏|praise
- sourceName: "DISCORD:Token%20Engineering%20Commons:%F0%9F%99%8F%EF%BD%9Cpraise"

Praise sourceId and sourceName for Twitter

sourceId: platform + ":" + userName + ":" + twitterId

Example:
- platform: TWITTER
- userName: givethpraise
- twitterId: 810180622336262195
- sourceId: "TWITTER:givethpraise:810180622336262195"

sourceName: platform + ":" + urlencode(displayName)  // Third part omitted because.. it does not exist

Example:
- platform: TWITTER
- displayName: Giveth Praise Bot
- sourceName: "TWITTER:Giveth%20Praise%20Bot"

Wireframes

Twitter Praise Bot - Example Twitter praise flow.jpg

Links and docs

Full wireframes here: https://miro.com/app/board/uXjVMBzP9YQ=/?share_link_id=604231143882

kristoferlund avatar Jun 14 '23 13:06 kristoferlund