def feedback(bot, update): ##update.message.reply_text('REPLY pesan ini untuk mengirimkan saran atau melaporkan bugs.\nKETIK dan KIRIM `/cancel` untuk membatalkan sesi feedback.\n\n', parse_mode='Markdown', reply_markup=ForceReply()) ##return FEEDB_MSG update.message.reply_text('Gunakan link ke Facebook page kami untuk mengirimkan saran atau melaporkan bugs: https://fb.me/IDAzanBot ', disable_web_page_preview=True) if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='feedback')
def cancel(bot,update): update.message.reply_text('Sesi Feedback telah dibatalkan', reply_markup=ReplyKeyboardRemove()) user = update.message.from_user logger.info("First name: {}, Last name: {}, Username: {}, canceled the feedback.".format(user.first_name, user.last_name, user.username)) return ConversationHandler.END if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='cancel')
def restart(bot, update): bot.send_message(update.message.chat_id, "Bot is restarting...") if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='restart') time.sleep(0.2) os.execl(sys.executable, sys.executable, *sys.argv)
def botstat(bot, update): cusers_qry_stat_member = db.cusers.find({"fblock": False}).count() cusers_qry_stat_mbrzns = db.cusers.find({"fblock": False, "czones_id": {"$ne": None}}).count() cusers_qry_stat_mbrntf = db.cusers.find({"fdsble": False, "fblock": False, "czones_id": {"$ne": None}}).count() msg = '*[Statistics]*\n' msg = '{}Active Subscriber: {}\n'.format(msg, cusers_qry_stat_member) msg = '{}Active Subscriber w/ Zone data: {}\n'.format(msg, cusers_qry_stat_mbrzns) msg = '{}Active Subscriber w/ Zone data & notification: {}'.format(msg, cusers_qry_stat_mbrntf) update.message.reply_text(msg, parse_mode='Markdown') if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='botstat')
def stop(bot, update): chat_id = update.message.chat_id doc_cusers_qry = db.cusers.find_one({"_id": chat_id}, {"_id": 1}) if doc_cusers_qry is not None: cusers_upd = db.cusers.update_one( {"_id": chat_id}, {"$set": {"fdsble": True}} ) update.message.reply_text('Notifikasi telah dinonaktifkan. Notifikasi dapat Anda aktifkan kembali dengan mengirimkan perintah /start .') else: update.message.reply_text('Error! Setting Zona belum dilakukan. Gunakan perintah /setting untuk melakukan setting Zona.') if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='stop')
def today(bot, update): chat_id = update.message.chat_id doc_cusers_qry = db.cusers.find_one({"_id": chat_id}) if doc_cusers_qry is not None: lv_zones = doc_cusers_qry.get('czones_id') if lv_zones is not None: msg = prayertime(lv_zones) update.message.reply_text(msg, parse_mode='Markdown', disable_web_page_preview=True) else: update.message.reply_text('Setting Zona belum dilakukan.\nGunakan perintah /setting untuk melakukan setting Zona.') else: update.message.reply_text('Setting Zona belum dilakukan.\nGunakan perintah /setting untuk melakukan setting Zona.') if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='today')
def help(bot, update): msg = "Assalaamu'alaikum\n\n" msg = '{}Berikut ini daftar perintah yang dapat Anda berikan pada bot:\n\n'.format(msg) msg = '{}/start - untuk mengaktifkan bot dan notifikasi. Gunakan juga perintah ini untuk mengaktifkan kembali notifikasi jika sebelumnya Anda telah menggunakan perintah /stop .\n\n'.format(msg) msg = '{}/stop - untuk menonaktifkan notifikasi dari bot. Anda masih tetap dapat mempergunakan semua perintah yang ada, seperti /today atau /prayerinfo untuk informasi jadwal salat hari ini.\n\n'.format(msg) msg = '{}/help - untuk menampilkan menu help ini.\n\n'.format(msg) msg = '{}/next - untuk menampilkan informasi berapa lama ke notifikasi yang berikutnya.\n\n'.format(msg) msg = '{}/n - alias untuk /next . Memiliki fungsi yang sama dengan perintah /next .\n\n'.format(msg) msg = '{}/setting - menu setting. Set zona Anda, atur notifikasi untuk notifikasi waktu Imsak dan Terbit dan pengaturan fungsi Reminder.\n\n'.format(msg) msg = "{}/today - meminta bot untuk mengirimkan jadwal waktu salat hari ini untuk zona Anda.\n\n".format(msg) msg = "{}/t - alias untuk /today . Memiliki fungsi yang sama dengan perintah /today .\n\n".format(msg) msg = "{}/prayerinfo - meminta bot untuk mengirimkan jadwal waktu salat hari ini untuk zona tertentu.\n\n".format(msg) msg = '{}/feedback - input dan saran dari Anda sangat kami nantikan. Gunakan pula perintah ini untuk melaporkan bugs yang Anda jumpai.\n\n'.format(msg) #msg = '{}`/cancel` - untuk membatalkan sesi feedback. Perintah ini hanya akan aktif jika Anda berada di dalam sesi feedback.\n\n' msg = '{}/rateme - berikan rating Anda untuk bot ini.\n\n'.format(msg) update.message.reply_text(msg, parse_mode='Markdown') if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='help')
def start(bot, update): chat_id = update.message.chat_id doc_cusers_qry = db.cusers.find_one({"_id": chat_id}, {"_id": 1}) if doc_cusers_qry is not None: cusers_upd = db.cusers.update_one( {"_id": chat_id}, {"$set": {"fdsble": False, "fblock": False }} ) msg = "Assalaamu'alaikum\n\n" msg = '{}Silakan melakukan setting Zona terlebih dahulu dengan mengirimkan perintah /setting .\n\n'.format(msg) msg = '{}Notifikasi akan dikirim otomatis saat memasuki waktu salat.\n\n'.format(msg) msg = '{}Gunakan perintah /today untuk mengetahui jadwal waktu salat hari ini bagi zona Anda atau perintah '.format(msg) msg = '{}/prayerinfo untuk mendapatkan jadwal waktu salat zona-zona lainnya.\n\n'.format(msg) msg = '{}Untuk informasi perintah-perintah lain yang dapat diberikan pada bot, Anda dapat mengirimkan /help .\n\n'.format(msg) msg = '{}Follow kami di Facebook page - https://fb.me/IDAzanBot \n'.format(msg) #msg = '{}\n'.format(msg) #msg = '{}ID_AzanBot menggunakan data waktu salat dari Kementerian Agama Republik Indonesia.'.format(msg) update.message.reply_text(msg, disable_web_page_preview=True) if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='start')
def setting(bot, update): chat_id = update.message.chat_id doc_cusers_qry = db.cusers.find_one({"_id": chat_id}) lv_notiflog = False if doc_cusers_qry == None: cusers_ins = db.cusers.insert_one( {"_id": chat_id, "czones_id": None, "fblock": False, "fdaily": False, "fdsble": False, "frmndr": 0, "fsyurk": False, "fimsak": False} ) lv_notiflog = True reply_markup = InlineKeyboardMarkup(settingmenu(chat_id)) update.message.reply_text('Setting:', reply_markup=reply_markup) if lv_notiflog == True: user = update.message.from_user lv_subject = '' if 'test' in DBNAME: lv_subject = 'TEST ' logger.info("[New User] Chat ID: {}, First name: {}, Last name: {}, Username: {}.".format(chat_id, user.first_name, user.last_name, user.username)) try: bot.send_message(chat_id=LOG_CHATID, text='[{}New User] Chat ID: {}, First name: {}, Last name: {}, Username: {}'.format(lv_subject, chat_id, user.first_name, user.last_name, user.username)) except TelegramError as e: logger.error('[TelegramError] Notification of New User {} caused error: {}'.format(chat_id, e.message)) if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='setting')
def echoreply(bot, update): update.message.reply_text(update.message.text) if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='echoreply')
def test_wrong_endpoint(self): botan = Botan(self.token) botan.url_template = 'https://api.botaaaaan.io/traccc?token={token}&uid={uid}&name={name}' message = MessageMock(self._chat_id) result = botan.track(message, 'named event') self.assertFalse(result)
def rateme(bot, update): update.message.reply_text('Ikuti link berikut untuk memberi rating: {}'.format(STOREBOT_REVIEW_URL), disable_web_page_preview=True) if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='rateme')
def prayerinfo(bot, update): reply_markup = InlineKeyboardMarkup(prayerinfomenu()) update.message.reply_text('Waktu Salat Hari Ini.\n\nPilih propinsi:', reply_markup=reply_markup) if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='prayerinfo')
def next(bot, update): chat_id = update.message.chat_id doc_cusers_qry = db.cusers.find_one({"_id": chat_id}) if doc_cusers_qry is not None: lv_zones = doc_cusers_qry.get('czones_id') if lv_zones is not None: doc_czones_qry = db.czones.find_one({"_id": lv_zones, "fxpara": {"$ne": "default"}}) lv_ftzone = doc_czones_qry.get('ftzone') lv_txzone = ' ' if lv_ftzone == 7: lv_txzone = 'WIB' elif lv_ftzone == 8: lv_txzone = 'WITA' elif lv_ftzone == 9: lv_txzone = 'WIT' utctime = datetime.datetime.utcnow() localtime = utctime + datetime.timedelta(hours = lv_ftzone) localtime = localtime.replace(hour=0, minute=0, second=0, microsecond=0) #Getting midnight of localtime # localtime = localtime.replace(hour=0) #Getting utctime for midnight of localtime # utcbegtime = localtime + datetime.timedelta(hours = -1*lv_ftzone) # utcendtime = utcbegtime + datetime.timedelta(hours = 24) csched_qry = db.csched.find({"_id": {"$gt": utctime}, "fazfor.czones_id": lv_zones}).sort("_id", 1) msg = '' for doc_csched_qry in csched_qry: for lv_fazfor in doc_csched_qry['fazfor']: if lv_fazfor.get('czones_id') == lv_zones: localtime = doc_csched_qry.get('_id') lv_diffs = (localtime - utctime).total_seconds() localtime = localtime + datetime.timedelta(hours = lv_ftzone) msg = '{}`{} - {} {}`\n\n'.format(msg, lv_fazfor.get('ftypes'), localtime.strftime('%H:%M'), lv_txzone) break break #Hijri function hijritime = HijriDate(localtime.date().year, localtime.date().month, localtime.date().day, gr=True) doc_chijri_qry = db.chijri.find_one({"_id": int(hijritime.month)}) lv_orihijriday = hijritime.day hijritime.day = hijritime.day + doc_chijri_qry.get('fadjst') if int(hijritime.day) == 30: if doc_chijri_qry.get('f29flg') == True: hijritime.day = 1 if hijritime.month == 12: hijritime.month = 1 hijritime.year = hijritime.year + 1 else: hijritime.month = hijritime.month + 1 elif int(lv_orihijriday) == 1: if int(hijritime.month) == 1: doc_chijri_qry = db.chijri.find_one({"_id": 12}) else: doc_chijri_qry = db.chijri.find_one({"_id": int(hijritime.month)-1}) if doc_chijri_qry.get('f30flg') == True: hijritime.day = 30 if int(hijritime.month) == 1: hijritime.month = 12 hijritime.year = hijritime.year - 1 else: hijritime.month = hijritime.month - 1 #End of Hijri function msg = '{}_{}, {} {} {} | '.format(msg, LOCAL_DAY[localtime.weekday()], localtime.day, LOCAL_MONTH[localtime.month], localtime.year) msg = '{}{} {} {}\n'.format(msg, int(hijritime.day), HIJRI_MONTH[int(hijritime.month)], int(hijritime.year)) msg = '{}{} - {}_'.format(msg, doc_czones_qry.get('fdescr'), doc_czones_qry.get('fstate')) lv_diffh = int(lv_diffs / 3600) lv_diffm = int((lv_diffs % 3600) / 60) + ((lv_diffs % 3600) % 60 > 0) if lv_diffm == 60: lv_diffm = 0 lv_diffh += 1 if lv_diffh == 0 and lv_diffm > 0: msg = '`{} menit menuju waktu `{}'.format(lv_diffm, msg) elif lv_diffh == 0 and lv_diffm == 0: msg = '`Tepat saat waktu `{}'.format(msg) elif lv_diffh > 0 and lv_diffm == 0: msg = '`{} jam menuju waktu `{}'.format(lv_diffh, msg) elif lv_diffh > 0 and lv_diffm > 0: msg = '`{} jam dan {} menit menuju waktu `{}'.format(lv_diffh, lv_diffm, msg) update.message.reply_text(msg, parse_mode='Markdown') else: update.message.reply_text('Setting Zona belum dilakukan.\nGunakan perintah /setting untuk melakukan setting Zona.') else: update.message.reply_text('Setting Zona belum dilakukan.\nGunakan perintah /setting untuk melakukan setting Zona.') if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='next')
def test_wrong_message(self): botan = Botan(self.token) message = MessageMock(self._chat_id) message = delattr(message, 'chat_id') result = botan.track(message, 'named event') self.assertFalse(result)
def echo(bot, update): chat_id = update.message.chat_id bot.send_message(chat_id=chat_id, text=update.message.text) if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='echo')
def chatid(bot, update): chat_id = update.message.chat_id update.message.reply_text(str(chat_id)) if not 'test' in DBNAME: Botan(BOTAN_TOKEN).track(update.message, event_name='chatid')
from myinstants import search_instants # Enable logging logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) LOGGER = logging.getLogger(__name__) # Load config file with open('config.json') as config_file: CONFIGURATION = json.load(config_file) # Create a Botan tracker object BOTAN = Botan(CONFIGURATION["botan_token"]) def start(bot, update): """Start command handler""" bot.sendMessage(update.message.chat_id, text='Hi!\nYou can use this bot in any chat, just type ' '@myinstantsbot query message\nEnjoy!') def help_command(bot, update): """Help command""" bot.sendMessage(update.message.chat_id, text='This bot search sounds in myinstants.com\n' 'You can use it in any chat, just type ' '@myinstantsbot query message')
from flask import Flask, request, redirect # Enable logging logging.basicConfig( filename='/home/gaiar/projects/forwardbot/forwardbot.log', filemode='a', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.DEBUG) logger = logging.getLogger(__name__) pocket_instance = Pocket(tokens.POCKET_CONSUMER_TOKEN, tokens.POCKET_ACCESS_TOKEN) auth_token = "" db = ForwardBotDatabase('botusers.db') botan = Botan(tokens.BOTAN_TOKEN) users = {} #updater = Updater(tokens.TELEGRAM_TOKEN) bot = Bot(tokens.TELEGRAM_TOKEN) update_queue = Queue() dp = Dispatcher(bot, update_queue) app = Flask(__name__) def start(bot, update, args): telegram_user = update.message.from_user
# License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. import json from telegram.ext import Updater from telegram.contrib.botan import Botan from game_manager import GameManager from database import db import user_setting # required to generate db mapping db.bind('sqlite', 'uno.sqlite3', create_db=True) db.generate_mapping(create_tables=True) gm = GameManager() with open("config.json","r") as f: config = json.loads(f.read()) updater = Updater(token=config.get("token"), workers=config.get("workers", 32)) dispatcher = updater.dispatcher if config.get("botan_token"): botan = Botan(config.get("botan_token")) else: botan = None
chats = db.get('chats') chats.remove(update.message.chat_id) db.set('chats', chats) logger.info('Removed chat_id %s from chat list' % update.message.chat_id) else: logger.error("Un error (%s) ocurrió: %s" % (type(error), error.message)) except: pass botan = None if BOTAN_TOKEN != 'BOTANTOKEN': botan = Botan(BOTAN_TOKEN) @run_async def stats(bot, update, **kwargs): if not botan: return if botan.track(update.message): logger.debug("Tracking with botan.io successful") else: logger.info("Tracking with botan.io failed") def main(): # Create the Updater and pass it your bot's token. updater = Updater(TOKEN, workers=10)
def test_track(self): botan = Botan(self.token) message = MessageMock(self._chat_id) result = botan.track(message, 'named event') self.assertTrue(result)