karma.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. from wbb import app
  2. from wbb.utils.errors import capture_err
  3. from wbb.utils.json_prettify import json_prettify
  4. from wbb.utils.dbfunctions import (update_karma, get_karma, get_karmas,
  5. int_to_alpha, alpha_to_int)
  6. from pyrogram import filters
  7. __MODULE__ = "Karma"
  8. __HELP__ = """[UPVOTE] - Use upvote keywords like "+", "+1", "thanks" etc to upvote a message.
  9. [DOWNVOTE] - Use downvote keywords like "-", "-1", etc to downvote a message.
  10. Reply to a message with /karma to check a user's karma
  11. Send /karma without replying to any message to chek karma list of top 10 users"""
  12. regex_upvote = r"^((?i)\+|\+\+|\+1|thx|tnx|ty|thank you|thanx|thanks|pro|cool|good|👍)$"
  13. regex_downvote = r"^(\-|\-\-|\-1|👎)$"
  14. @app.on_message(filters.text
  15. & filters.group
  16. & filters.incoming
  17. & filters.reply
  18. & filters.regex(regex_upvote)
  19. & ~filters.via_bot
  20. & ~filters.bot
  21. & ~filters.edited, group=3)
  22. async def upvote(_, message):
  23. if message.reply_to_message.from_user.id == message.from_user.id:
  24. return
  25. chat_id = message.chat.id
  26. user_id = message.reply_to_message.from_user.id
  27. user_mention = message.reply_to_message.from_user.mention
  28. current_karma = await get_karma(chat_id, await int_to_alpha(user_id))
  29. if current_karma:
  30. current_karma = current_karma['karma']
  31. karma = current_karma + 1
  32. new_karma = {"karma": karma}
  33. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  34. else:
  35. karma = 1
  36. new_karma = {"karma": karma}
  37. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  38. await message.reply_text(
  39. f'Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}'
  40. )
  41. @app.on_message(filters.text
  42. & filters.group
  43. & filters.incoming
  44. & filters.reply
  45. & filters.regex(regex_downvote)
  46. & ~filters.via_bot
  47. & ~filters.bot
  48. & ~filters.edited, group=4)
  49. async def downvote(_, message):
  50. if message.reply_to_message.from_user.id == message.from_user.id:
  51. return
  52. chat_id = message.chat.id
  53. user_id = message.reply_to_message.from_user.id
  54. user_mention = message.reply_to_message.from_user.mention
  55. current_karma = await get_karma(chat_id, await int_to_alpha(user_id))
  56. if current_karma:
  57. current_karma = current_karma['karma']
  58. karma = current_karma - 1
  59. new_karma = {"karma": karma}
  60. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  61. else:
  62. karma = 1
  63. new_karma = {"karma": karma}
  64. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  65. await message.reply_text(
  66. f'Decremented Karma Of {user_mention} By 1 \nTotal Points: {karma}'
  67. )
  68. @app.on_message(filters.command("karma") & filters.group)
  69. async def karma(_, message):
  70. chat_id = message.chat.id
  71. if not message.reply_to_message:
  72. karma = await get_karmas(chat_id)
  73. msg = f"**Karma list of {message.chat.title}:- **\n"
  74. # output = await json_prettify(karma)
  75. limit = 0
  76. for i in karma:
  77. if limit > 9:
  78. break
  79. ii = ""
  80. user_id = await alpha_to_int(i)
  81. user_karma = karma[i]['karma']
  82. user_name = (await app.get_users(user_id)).username
  83. ii += f"{user_name} {user_karma}"
  84. msg += f"`{ii}`\n"
  85. limit += 1
  86. await message.reply_text(msg)
  87. else:
  88. user_id = message.reply_to_message.from_user.id
  89. karma = await get_karma(chat_id, await int_to_alpha(user_id))
  90. if karma:
  91. karma = karma['karma']
  92. await message.reply_text(f'**Total Points**: __{karma}__')
  93. else:
  94. karma = 0
  95. await message.reply_text(f'**Total Points**: __{karma}__')