xosski

Telegram bot example

Dec 4th, 2024
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.86 KB | None | 0 0
  1. from telegram import Update
  2. from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, ContextTypes
  3. import asyncio
  4. from sydney import SydneyClient
  5. from dotenv import load_dotenv
  6. import os
  7.  
  8. # Carica le variabili d'ambiente dal file .env
  9. load_dotenv()
  10.  
  11. # Token del bot Telegram
  12. TELEGRAM_TOKEN = os.getenv("7312830464:AAG4kVEPiXY2tP4wK7UZW8MrSWbRn3QPnNM")
  13.  
  14. # Istruzioni di contesto da dare a Sydney
  15. contesto_iniziale = """
  16. Sei un assistente virtuale progettato per supportare lo staff di un gruppo Telegram nella moderazione e gestione del gruppo pubblico. Il tuo obiettivo è garantire che il regolamento venga rispettato, fornire assistenza tecnica e suggerire soluzioni pratiche. Mantieni un tono professionale e adattabile, con risposte dettagliate, sintetiche e utili. Ecco le istruzioni per le tue funzioni:
  17.  
  18. 1. Regolamento del Gruppo
  19. Devi conoscere e applicare il regolamento pubblico, che include:
  20. Contenuti Vietati: Violenza, razzismo, pornografia, nazifascismo, gore, dati personali, screenshot privati non anonimizzati, contenuti epilettici.
  21. Comportamenti Vietati: Trolling, spam, flame pesante, molestie, abuso bot, richieste di chat private.
  22. Lingua Consentita: Italiano e inglese.
  23. Regole in Chat Vocale: Identiche a quelle testuali.
  24. Assistenza: Gli utenti possono taggare @admin o usare il bot di assistenza per problemi urgenti.
  25.  
  26. 2. Moderazione
  27. Fornisci supporto per:
  28. Applicare punizioni per violazioni del regolamento.
  29. Suggerire azioni proporzionate (es. avvisi, ban temporanei o permanenti).
  30.  
  31. Proporre soluzioni per conflitti tra utenti.
  32. Esempi di comandi utili con GroupHelp:
  33. /ban [@username] [durata] [motivo]: Bannare un utente.
  34. /kick [@username]: Rimuovere un utente.
  35. /warn [@username] [motivo]: Ammonire un utente.
  36. /mute [@username] [durata]: Silenziare un utente.
  37. /impostazioni: Configurare il bot.
  38. /staff: Vedere lo staff del gruppo.
  39.  
  40. 3. Comunicazione
  41. Crea messaggi standard per:
  42. Annunciare regole o cambiamenti.
  43. Avvertire utenti che violano le regole.
  44. Rispondere in modo educato e professionale alle contestazioni.
  45.  
  46. 4. Situazioni Critiche
  47. Gestisci situazioni difficili come:
  48. Spam massivo o raid.
  49. Insulti pesanti o discriminazioni.
  50. Condivisione di contenuti vietati. Fornisci risposte rapide e suggerisci procedure operative per ripristinare l’ordine.
  51.  
  52. 5. Assistenza Tecnica
  53. Aiuta lo staff e gli utenti a:
  54. Comprendere e utilizzare i comandi del bot.
  55. Configurare strumenti di moderazione.
  56. Risolvere problemi tecnici con bot o comandi.
  57.  
  58. 6. Formazione Staff
  59. Spiega ruoli e responsabilità dei moderatori.
  60. Fornisci istruzioni per l’uso avanzato di comandi e bot.
  61. Proponi modi per documentare azioni di moderazione.
  62.  
  63. 7. Promozione di un Ambiente Positivo
  64. Suggerisci strategie per:
  65. Incoraggiare il rispetto e l’educazione.
  66. Promuovere conversazioni costruttive.
  67. Risolvere conflitti in modo diplomatico.
  68.  
  69. 8. Personalizzazione
  70. Adatta il livello di dettaglio e il tono delle risposte all’esperienza dell’interlocutore.
  71. Offri soluzioni su misura per problemi specifici.
  72.  
  73. 9. Prevenzione
  74. Suggerisci miglioramenti per evitare violazioni ricorrenti.
  75. Proponi modi per comunicare il regolamento in modo chiaro.
  76.  
  77.  
  78. 10. Aggiornamento e Adattabilità
  79. Aggiornati automaticamente con modifiche al regolamento o al bot.
  80. Rispondi a nuove esigenze del gruppo, come gestire utenze più grandi.
  81.  
  82. Devi essere preparato a rispondere su:
  83.  
  84. Regole del gruppo e loro applicazione.
  85. Uso dei comandi di GroupHelp per moderare.
  86. Gestione di violazioni specifiche (spam, insulti, flame).
  87. Assistenza tecnica per bot e comandi.
  88. Comunicazione e gestione conflitti.
  89. Suggerimenti per migliorare regolamenti e procedure.
  90.  
  91.  
  92. Stile delle Risposte:
  93. Chiarezza: Offri risposte concise ma dettagliate.
  94. Tono Professionale: Mantenendo accessibilità e rispetto.
  95. Formattazione: Usa elenchi puntati e paragrafi brevi.
  96.  
  97. Esempio di risposte integrate:
  98. 1. ""Un utente sta spammando link non consentiti. Suggerisco di usare il comando /ban @username+durata motivo per bannarlo temporaneamente. Ricorda che è vietato promuovere altri gruppi.""
  99. 2. ""Per avvisare un utente che viola il regolamento, utilizza /warn @username motivo. Ad esempio: /warn @esempio spam non consentito.""
  100. Quando un ID viene inoltrato, rispondi indicando il nome utente e, se necessario, chiedi ulteriori dettagli o istruzioni
  101.  
  102. Riconoscimento Staff Quando viene fornito un ID numerico, associa l'ID al nome e al ruolo corrispondente secondo questa lista:
  103. 6873671638 -> Senpai
  104. 5691375568 -> Esse
  105. 6561895685 -> Vix
  106. 6829937529 -> Griffo
  107. 205619075 -> Candyman
  108. 753403186 -> NotManu
  109. 1033831873 -> Il Potere
  110. 6726694725 -> Cristo
  111. 1616299129 -> Daniele
  112. 989284712 -> BlackSnow
  113. 859434148 -> Ringo
  114. 172234216 -> Vis
  115.  
  116. Riconoscimento e Funzione dei Topic
  117. 1. Quando viene menzionato un Topic, riconosci il nome e rispondi fornendo una breve descrizione della sua funzione.
  118. 2. Utilizza queste associazioni per ogni Topic:
  119.  
  120. Nome Topic: 𝐒𝐄𝐆𝐍𝐀𝐋𝐀𝐙𝐈𝐎𝐍𝐈
  121. Funzione: Questo topic è destinato alle segnalazioni inviate tramite il comando @admin dagli utenti del gruppo pubblico. È un topic chiuso dove gli Staffer non possono scrivere, ma in cui arrivano automaticamente tutte le segnalazioni.
  122. Nome Topic: 𝐂𝐡𝐚𝐭 𝐒𝐭𝐚𝐟𝐟
  123. Funzione: Topic aperto per la comunicazione tra gli Staffer. Qui possono discutere di qualsiasi argomento inerente alla moderazione del gruppo pubblico.
  124. Nome Topic: 𝘾𝙊𝙎𝙀 𝙐𝙍𝙂𝙀𝙉𝙏𝙄
  125. Funzione: Topic aperto a tutti, usato per comunicare questioni urgenti che richiedono attenzione immediata.
  126. Nome Topic: 𝗽𝗼𝗿𝗽𝗼𝘀𝘁𝗲 𝘼𝙙𝙢𝙞𝙣
  127. Funzione: Questo topic è adibito alla gestione della recluta. Qui gli Staffer discutono sull’integrazione di nuovi membri nel gruppo Staff.
  128. Nome Topic: 𝐔𝐭𝐞𝐧𝐭𝐢 𝐅𝐑𝐄𝐄
  129. Funzione: Topic per segnalare gli utenti del gruppo pubblico ai quali viene assegnato lo stato ""free"". Questo comando /free) rimuove le restrizioni imposte dal bot di gestione GroupHelp.
  130. Nome Topic: 𝗖𝗮𝘇𝘇𝗲𝗴𝗴𝗶𝗼
  131. Funzione: Spazio dedicato alla comunicazione libera tra gli Staffer, senza interferire con gli altri topic ufficiali.
  132. Nome Topic: 𝗣𝗥𝗢𝗩𝗘 𝗕𝗔𝗡
  133. Funzione: Utilizzato per discutere e confrontarsi su eventuali ban da applicare agli utenti del gruppo pubblico.
  134. Nome Topic: 𝐒𝐀𝐋𝐀 𝐓𝐑𝐀𝐈𝐍𝐈𝐍𝐆
  135. Funzione: Gestito dal proprietario del gruppo Staff, questo topic offre suggerimenti e istruzioni su come gestire il bot GroupHelp e altre attività per rendere il team più preparato su Telegram.
  136.  
  137. Compiti degli Staffer nel monitoraggio:
  138. Verifica delle notifiche: Lo staff deve controllare regolarmente il Canale Log per essere aggiornato sugli eventi più recenti e intervenire quando necessario.
  139. Segnalazioni sospette: Se un utente viene segnalato frequentemente tramite @admin, lo Staffer deve verificare le segnalazioni e prendere le misure appropriate.
  140. Azioni disciplinari: Controllare che i ban, mute, warn o kick siano stati applicati correttamente e, se necessario, discuterne nei topic appropriati es. 𝗣𝗥𝗢𝗩𝗘 𝗕𝗔𝗡).
  141. Ingressi/Uscite utenti: Tenere traccia di utenti che entrano o escono dal gruppo per identificare comportamenti anomali es. ingressi ripetuti per spam.
  142. """
  143.  
  144. # Funzione per suddividere i messaggi lunghi
  145. def split_message(message, max_length=4096):
  146. return [message[i:i+max_length] for i in range(0, len(message), max_length)]
  147.  
  148. # Comando /start
  149. async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
  150. await update.message.reply_text("🤓𝐂𝐢𝐚𝐨! 𝐒𝐨𝐧𝐨 𝐢𝐥 𝐭𝐮𝐨 𝐚𝐬𝐬𝐢𝐬𝐭𝐞𝐧𝐭𝐞 𝐩𝐞𝐫𝐬𝐨𝐧𝐚𝐥𝐞 𝐩𝐞𝐫 𝐥𝐚 𝐠𝐞𝐬𝐭𝐢𝐨𝐧𝐞 𝐝𝐞𝐥𝐥𝐨 𝐬𝐭𝐚𝐟𝐟 𝐝𝐞𝐥 𝐠𝐫𝐮𝐩𝐩𝐨 『𝑆𝐴𝑁𝑇𝑈𝐴𝑅𝐼𝑂』. 𝐂𝐨𝐦𝐞 𝐩𝐨𝐬𝐬𝐨 𝐚𝐢𝐮𝐭𝐚𝐫𝐭𝐢? Digita qui sotto una qualsiasi domanda oppure utilizza i comandi /regolamento | /staff_rules")
  151.  
  152. # Comando /regolamento
  153. async def regolamento(update: Update, context: ContextTypes.DEFAULT_TYPE):
  154. full_text = """
  155. Regolamento del Gruppo:
  156.  
  157. ✅𝗥𝗜𝗖𝗛𝗜𝗘𝗦𝗧𝗢
  158. • Rispetto reciproco
  159. • Educazione
  160.  
  161. ⚠️𝗖𝗢𝗡𝗦𝗘𝗡𝗧𝗜𝗧𝗢
  162. • Flame leggero
  163.  
  164. 🚫 𝗩𝗜𝗘𝗧𝗔𝗧𝗢
  165. • Richieste chat pvt esplicite.
  166. • Molestie
  167. • Condividere contenuti gore
  168. • Spam generale di altri gruppi (vietato parlare di altri gruppi in vocal e testuale) e compravendita (di qualsiasi servizio/prodotto)
  169. • Condividere contenuti xenofobi, violenti, razzisti, nazifascisti.
  170. • Condividere dati sensibili
  171. • Abuso dei comandi bot
  172.  
  173. 🆘 𝗔𝗦𝗦𝗜𝗦𝗧𝗘𝗡𝗭𝗔
  174. Per segnalarci un problema tagga i moderatori con il comando @admin ed invialo nel gruppo. In caso urgente scrivi al nostro bot assistenza.
  175.  
  176. Lo Staff di 『𝑆𝐴𝑁𝑇𝑈𝐴𝑅𝐼𝑂』si solleva da qualsiasi responsabilità riguardo i privati, pertanto se infastiditi e/o minacciati raccomandiamo di bloccare questi utenti e segnalarli a Telegram.
  177. @creatura | @cinismo | @assonnata | @sussiego
  178. """
  179. # Dividi il messaggio in blocchi
  180. messages = split_message(full_text)
  181.  
  182. # Invia ogni blocco come un messaggio separato
  183. for msg in messages:
  184. await update.message.reply_text(msg)
  185.  
  186. # Comando /staff_rules
  187. async def staff_rules(update: Update, context: ContextTypes.DEFAULT_TYPE):
  188. full_text = """
  189. [Regolamento Interno
  190. x 𝗦𝘁𝗮𝗳𝗳 『𝑆𝐴𝑁𝑇𝑈𝐴𝑅𝐼𝑂』 •
  191. • 1) Finalità principali dello staff:
  192. Lo staff, ha come obiettivo principale la gestione coordinata e responsabile del gruppo, garantendo che le regole stabilite dal Regolamento pubblico vengano rispettate da tutti gli utenti.
  193.  
  194. Lo staff composto da proprietà/co-founder/moderatori/amministratori generali/supporto tecnico/ deve operare in maniera coordinata al fine di mantenere l'armonia interna allo staff e prevenire conflitti interni.
  195.  
  196. • 2) Comportamento dello Staff:
  197. Ogni membro dello staff deve mantenere un comportamento professionale, non troppo rigido ma rispettoso, sia nelle comunicazioni interne che in quelle con gli utenti del gruppo.
  198.  
  199. Le seguenti forme di condotta sono obbligatorie per tutti i membri interni allo staff:
  200.  
  201. - Riservatezza: le discussioni interne dello staff, inluse decisioni relative a sanzioni o situazioni problematiche, devono rimanere riservate e non essere divulgate a terzi. Il rispetto della riservatezza è essenziale per la fiducia reciproca.💪🏻
  202.  
  203. - Imparzialità: Le decisioni prese dallo staff devono essere basate esclusivamente sul regolamento del gruppo, senza favoritismi o pregiudizi verso alcun utente. Quindi siete chiamati a trattare ogni utente in modo equo o imparziale.😗
  204.  
  205. • 3) Presenza e Partecipazione Attiva:
  206. Per garantire un funzionamento efficiente del gruppo è necessario che ogni membro dello staff mantenga un livello minimo di presenza e partecipazione, secondo le seguenti indicazioni:
  207.  
  208. - Presenza minima: ognuno di noi è tenuto a garantire una presenza costante nel gruppo compatibile con gli impegni personali. La partecipazione minima richiesta sarà concordata all'interno dello staff tramite sondaggio, ad es: (almeno due/tre presenze attive giornaliere, per raggiungere un minimo di alcune ore settimanali).
  209.  
  210. Qualora un membro dello staff non possa essere presente per un periodo prolungato, è obbligato a comunicarlo in anticipo a tutto lo staff.
  211.  
  212. - Partecipazione alle riunioni: lo staff deve partecipare regolarmente a riunioni interne programmate con cadenza settimanale o mensile, in cui si discuteranno problematiche operative, decisioni strategiche e proposte di miglioramento. La partecipazione a tali riunioni è obbligatoria, salvo giustificata impossibilità.
  213.  
  214. • 4) Interventi disciplinari nel Gruppo Pubblico: (molto importante)
  215. Le azioni disciplinari devono essere gestite con equilibrio, seguendo una procedura chiara:
  216.  
  217. - Avvertimenti: in caso di violazione del regolamento da parte di un utente, lo staff è tenuto a intervenire con un avvertimento formale, nel caso in cui l'utente continuare a violare le regole, si può procedere con sanzioni come mute giornalieri/ban temporanei o in casi estremi, ban permanenti.
  218.  
  219. - Documentazione delle azioni: ogni azione disciplinare dovrà essere registrata e riportata nella apposita chat del gruppo staff. Questo ci permetterà di mantenere un tracciamento delle sanzioni più semplice del file log.
  220.  
  221. - Proporzionalità: le sanzioni devono essere proporzionali alla gravità dell'infrazione. (Prima di applicare Ban permanenti o altre misure severe è obbligatorio consultarsi con i Co-founder o proprietà)
  222.  
  223. • 5) Conseguenze per le violazioni del Regolamento Interno allo staff:
  224. In caso di violazione delle norme interne da parte di un membro dello staff, sono previste le seguenti misure disciplinari:
  225.  
  226. - Richiamo ufficiale: un primo richiamo sarà inviato al membro dello staff in caso di comportamenti non conformi al regolamento interno. Questo avviso sarà formale e discusso all'interno della chat privata dello staff.
  227.  
  228. - Sospensione Temporanea: dopo un secondo richiamo, se le infrazioni o i comportamenti scorretti persistono, il membro dello staff può essere temporaneamente sospeso dalle sue funzioni per un periodo stabilito dai Co-founder o la proprietà.
  229.  
  230. - Rimozione definitiva: in caso di ripetute e gravi violazioni o di comportamenti volti al favoritismo, il membro dello staff può essere rimosso definitivamente dalla sua posizione. Questa decisione verrà presa dai Co-founder o la proprietà dopo una discussione interna e un'eventuale votazione tra gli stessi.
  231.  
  232. • 6) Dimissioni e Sostituzioni:
  233. Qualsiasi membro dello staff che desidera dimettersi dall'incarico è tenuto a comunicarlo con almeno 3 giorni di anticipo, in modo da consentire ai Co-Founder o la proprietà di trovare un sostituto. (Se la comunicazione prematura di 3 giorni non viene rispettata tale persona non verrà più accettata nello staff).
  234.  
  235. Questo regolamento spero possa fornirvi una base solida e strutturata per garantire la nostra gestione interna dello staff]
  236. """
  237. # Dividi il messaggio in blocchi
  238. messages = split_message(full_text)
  239.  
  240. # Invia ogni blocco come un messaggio separato
  241. for msg in messages:
  242. await update.message.reply_text(msg)
  243.  
  244. # Gestione dei messaggi con Sydney e contesto iniziale
  245. async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
  246. user_message = update.message.text
  247.  
  248. try:
  249. # Crea una sessione con SydneyClient
  250. async with SydneyClient() as sydney:
  251. # Concatenare le istruzioni di contesto al messaggio dell'utente
  252. messaggio_completo = f"{contesto_iniziale}\nUtente: {user_message}"
  253.  
  254. print(f"Ricevuto messaggio: {user_message}")
  255.  
  256. # Richiedi la risposta a Sydney
  257. response = ""
  258. async for part in sydney.ask_stream(messaggio_completo):
  259. response += part
  260.  
  261. # Suddividi la risposta in blocchi e invia
  262. messages = split_message(response)
  263. for msg in messages:
  264. await update.message.reply_text(msg)
  265.  
  266. except Exception as e:
  267. print(f"Errore durante la chiamata a Sydney: {e}")
  268. await update.message.reply_text("Errore nel processare la richiesta. Riprova più tardi.")
  269.  
  270. # Configurazione dell'applicazione
  271. if __name__ == "__main__":
  272. app = ApplicationBuilder().token(TELEGRAM_TOKEN).build()
  273.  
  274. # Aggiunta dei comandi
  275. app.add_handler(CommandHandler("start", start))
  276. app.add_handler(CommandHandler("regolamento", regolamento))
  277. app.add_handler(CommandHandler("staff_rules", staff_rules))
  278.  
  279. # Gestione dei messaggi testuali
  280. app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
  281.  
  282. print("Bot avviato...")
  283. app.run_polling()
Tags: telegram
Add Comment
Please, Sign In to add comment