diff options
| author | it-fixcomart <it@fixcomart.co.id> | 2024-10-11 10:02:33 +0700 |
|---|---|---|
| committer | it-fixcomart <it@fixcomart.co.id> | 2024-10-11 10:02:33 +0700 |
| commit | c631620706a24426faea6b43c2a0602eebf9a5e4 (patch) | |
| tree | 440ad54110f0cb11f9252537b58616934fc009e7 | |
| parent | 9c6e2e8f35f14dda376e543e5b63b0bddee2fd88 (diff) | |
<iman> fix code get telegram api
| -rw-r--r-- | indoteknik_custom/models/stock_picking.py | 37 | ||||
| -rw-r--r-- | indoteknik_custom/models/website_telegram.py | 92 |
2 files changed, 91 insertions, 38 deletions
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 58eb5d82..5f2fe99a 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -312,18 +312,39 @@ class StockPicking(models.Model): def ask_return_approval(self): telegram_data = { - 'tittle': 'Permintaan retur ' + self.name, + 'tittle': self.name, 'about': 'Permintaan retur ' + self.name, 'id_data': self.id, 'username': '@'+self.name.replace('/', '') } - telegram = request.env['website.telegram'].create(telegram_data) - for pick in self: - if self.env.user.is_accounting: - pick.approval_return_status = 'approved' - else: - pick.approval_return_status = 'pengajuan1' - telegram.create_channel() + channel_data = self.env['website.telegram'].search([('tittle', '=', self.name)]) + if channel_data: + for pick in self: + self._check_telegram(pick) + else: + telegram = request.env['website.telegram'].create(telegram_data) + telegram.create_channel() + for pick in self: + pick.approval_return_status = 'pengajuan1' + + def read(self, fields=None, load='_classic_read'): + # Panggil method 'read' bawaan terlebih dahulu + records = super(StockPicking, self).read(fields, load) + + # Jalankan _check_telegram untuk setiap record yang diakses + for record in self: + if record.approval_return_status == 'pengajuan1': + record._check_telegram() + + return records + + + def _check_telegram(self): + telegram = self.env['website.telegram'].search([('id_data', '=', self.id)]) + if telegram: + ask_return = telegram.receive_messages() + if ask_return: + self.approval_return_status = 'approved' def calculate_line_no(self): for picking in self: diff --git a/indoteknik_custom/models/website_telegram.py b/indoteknik_custom/models/website_telegram.py index d67cafc5..8bd789a1 100644 --- a/indoteknik_custom/models/website_telegram.py +++ b/indoteknik_custom/models/website_telegram.py @@ -4,68 +4,103 @@ from odoo import models, fields, api from telethon.sessions import StringSession from telethon.sync import TelegramClient from telethon import functions, types -from telethon.tl.types import InputChannel, InputPeerChannel +from telethon.tl.types import InputPeerChannel import asyncio from telethon.tl.functions.messages import SendMessageRequest +from telethon.tl.types import InputMediaPoll, Poll, PollAnswer, PeerChannel +import datetime +from telethon.tl.types import MessageMediaPoll +from telethon.tl.functions.messages import SendMediaRequest +from telethon.tl.types import TextWithEntities class WebsiteTelegram(models.Model): _name = 'website.telegram' _description = 'Telegram Channel' tittle = fields.Char("Channel Title") + invite_link = fields.Char("Channel invite link") username = fields.Char("Channel Name") id_data = fields.Char("Channel ID") about = fields.Char("Channel Description") is_broadcast = fields.Boolean("Is Broadcast", default=True) is_megagroup = fields.Boolean("Is Megagroup", default=False) + is_accept = fields.Boolean("Is Megagroup", default=False) + # session_string = 'MIIBCgKCAQEAyMEdY1aR+sCR3ZSJrtztKTKqigvO/vBfqACJLZtS7QMgCGXJ6XIRyy7mx66W0/sOFa7/1mAZtEoIokDP3ShoqF4fVNb6XeqgQfaUHd8wJpDWHcR2OFwvplUUI1PLTktZ9uW2WE23b+ixNwJjJGwBDJPQEQFBE+vfmH0JP503wr5INS1poWg/j25sIWeYPHYeOrFp/eXaqhISP6G+q2IeTaWTXpwZj4LzXq5YOpk4bYEQ6mvRq7D1aHWfYmlEGepfaYR8Q0YqvvhYtMte3ITnuSJs171+GDqpdKcSwHnd6FudwGO4pcCOj4WcDuXc2CTHgH8gFTNhp/Y8/SpDOhvn9QIDAQAB' def create_channel(self, *args, **kwargs): asyncio.run(self._async_create_channel()) async def _async_create_channel(self): - async with TelegramClient(StringSession('1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='), 27799517, 'df8ee44b0ed11108245037d47b511201') as client: + async with TelegramClient(StringSession( + '1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='), + 27799517, 'df8ee44b0ed11108245037d47b511201') as client: result = await client(functions.channels.CreateChannelRequest( - title=self.tittle, + title='Permintaan retur ' + self.tittle, about=self.about, broadcast=False, megagroup=True, )) channel = result.updates[3].message.peer_id - # username_to_add = ['@imsep81', '6285764475716', '@stephanchrst'] - username_to_add = ['@imsep81'] + channel_link = await client(functions.messages.ExportChatInviteRequest( + peer=InputPeerChannel(channel_id=channel.channel_id, access_hash=result.chats[0].access_hash), + )) + self.invite_link = channel_link.link + username_to_add = ['@imsep81', '6285764475716', '@stephanchrst'] + # username_to_add = ['@imsep81'] for name in username_to_add: user_to_add = await client.get_entity(name) - result = await client(functions.channels.InviteToChannelRequest( + result_add_user = await client(functions.channels.InviteToChannelRequest( channel=channel, users=[user_to_add.id], )) - message = 'https://erp.indoteknik.com/web#id='+self.id_data+'&action=209&model=stock.picking&view_type=form&cids=1&menu_id=101' - result = await client(SendMessageRequest(channel, message)) - - result = client(functions.channels.UpdateUsernameRequest( - channel=channel, - username='@indoJaya21' + message = 'https://erp.indoteknik.com/web#id=' + self.id_data + '&action=209&model=stock.picking&view_type=form&cids=1&menu_id=101' + result_massage = await client(SendMessageRequest(channel, message)) + + # Send the poll to the channel using PeerChannel with the channel's ID + result_polling = await client(SendMediaRequest( + peer=InputPeerChannel(channel_id=channel.channel_id, access_hash=result.chats[0].access_hash), + media=InputMediaPoll(poll=Poll( + question=TextWithEntities(text="ASK RETURN?", entities=[]), + answers=[ + PollAnswer(text=TextWithEntities(text="Accept", entities=[]), option=b'\x01'), + PollAnswer(text=TextWithEntities(text="Reject", entities=[]), option=b'\x02'), + ], + id=2 + )), + message='Ask Return Polling' )) - print(result.stringify()) def receive_messages(self): - asyncio.run(self._async_receive_messages()) + return asyncio.run(self._async_receive_messages()) async def _async_receive_messages(self): - async with TelegramClient(StringSession('1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='), - 27799517, 'df8ee44b0ed11108245037d47b511201') as client: - channel = await client.get_entity(self.username) - result = client(functions.channels.GetMessagesRequest( - channel=channel, - id=channel.chats + async with TelegramClient(StringSession( + '1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='), + 27799517, 'df8ee44b0ed11108245037d47b511201') as client: + channel = await client.get_entity(self.invite_link) + result = await client(functions.messages.GetHistoryRequest( + peer=channel, + offset_id=42, + offset_date=datetime.datetime(2024, 12, 31), + add_offset=0, + limit=100, + max_id=0, + min_id=0, + hash=channel.access_hash )) - print(result.stringify()) - def send_to_telegram(self, message): - # if self.env.all.registry.db_name == 'odoo016':return + accept_found = False + + for message in result.messages: + if not isinstance(message.media, MessageMediaPoll): + continue + if message.media.results.total_voters > 0: + if message.media.results.results[0].voters > message.media.results.results[1].voters: + accept_found = True + break - # message = self.env.all.registry.db_name + " : " + message - # message = self.test_message + return accept_found + def send_to_telegram(self, message): apiURL = f'https://api.telegram.org/bot{self.bot_name}/sendMessage' try: requests.post(apiURL, json={'chat_id': self.chatID, 'text': message}) @@ -74,7 +109,7 @@ class WebsiteTelegram(models.Model): def test_send(self): try: - self.env.cr.savepoint() #kembalikan database ke save point jika mengalami kesalahan + self.env.cr.savepoint() self.env['website.telegram'].search([('name', '=', self.name)])[0].send_to_telegram(self.test_message) except Exception as e: @@ -109,7 +144,7 @@ class WebsiteTelegram(models.Model): try: response = requests.get(apiURL) updates = response.json() - return updates # Ini akan berisi semua pembaruan, termasuk pesan baru + return updates except Exception as e: print(e) return None @@ -123,6 +158,3 @@ class WebsiteTelegram(models.Model): # chat_id = update['channel_post']['chat']['id'] # chat_name = update['channel_post']['chat']['username'] # print(f"Received message: {message_text} from chat_id: {chat_id}, that is: {chat_name}") - - - |
